実数(浮動小数点)値用スピンコントロール ― 2006年07月01日 23:42
http://cessna373.asablo.jp/blog/2006/06/25/420537
で数値入力欄にスピンコントロールを付けていることを書きました。
スピンコントロールは値を整数で管理しています。
そのため整数の入力欄については、スピンコントロールで管理している値をそのまま使うことができます。
しかし実数(浮動小数点)の場合は、スピンコントロールで管理している整数値との間で独自にマッピングを行う必要があります。
RH1 FFT では、0 より大きい実数値に対して有効数字を二桁に設定して、以下のようにマッピングしています。
(左が整数値、右が実数値)
...
100 20
...
92 12
91 11
90 10
80 9
...
20 3
10 2
...
2 1.2
1 1.1
0 1
-1 0.99
-2 0.98
...
-10 0.9
...
-80 0.2
-90 0.1
-100 0.09
...
完全に正確ではありませんが、変換式は大体以下のような感じです。
<実数> = pow10(<整数> / 90 - 1) * ((<整数> % 90) + 10)
<整数> = (int)(log10(<実数>)) * 90 + <実数>/(pow10((int)(log10(<実数>) - 1) - 10)
実際にプログラミングするときは、実数計算の数値誤差や整数変換時の切り上げ・切り捨てなどを考慮する必要があります。
なお時間グラフの横軸範囲は、実数は実数ですが実質的には固定小数点なので、整数値と同じように扱っています。
で数値入力欄にスピンコントロールを付けていることを書きました。
スピンコントロールは値を整数で管理しています。
そのため整数の入力欄については、スピンコントロールで管理している値をそのまま使うことができます。
しかし実数(浮動小数点)の場合は、スピンコントロールで管理している整数値との間で独自にマッピングを行う必要があります。
RH1 FFT では、0 より大きい実数値に対して有効数字を二桁に設定して、以下のようにマッピングしています。
(左が整数値、右が実数値)
...
100 20
...
92 12
91 11
90 10
80 9
...
20 3
10 2
...
2 1.2
1 1.1
0 1
-1 0.99
-2 0.98
...
-10 0.9
...
-80 0.2
-90 0.1
-100 0.09
...
完全に正確ではありませんが、変換式は大体以下のような感じです。
<実数> = pow10(<整数> / 90 - 1) * ((<整数> % 90) + 10)
<整数> = (int)(log10(<実数>)) * 90 + <実数>/(pow10((int)(log10(<実数>) - 1) - 10)
実際にプログラミングするときは、実数計算の数値誤差や整数変換時の切り上げ・切り捨てなどを考慮する必要があります。
なお時間グラフの横軸範囲は、実数は実数ですが実質的には固定小数点なので、整数値と同じように扱っています。
コメント
トラックバック
このエントリのトラックバックURL: http://cessna373.asablo.jp/blog/2006/07/01/428859/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。