- - PR -
[基礎]固定小数と浮動小数について
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-02-13 11:12
はにまるです。
[非 .net] VBAで機種依存文字のチェックで 固定小数と浮動小数の話が上がったので スレッドを新規で上げました。 追記は別途します。 | ||||||||||||||||
|
投稿日時: 2004-02-13 11:29
はにまるさんの仰る浮動小数というのは、通常の2進数の浮動小数の、基数を10にしたようなもののことだと思いますよ。 内部表現でいうと、「仮数部10進数、指数部10のべき乗」みたいな感じのやつです。 これだと、当然有効桁数の考えはありますが、2進数で表現できない数値に対する誤差というものがなくなりますし、固定小数とは違い、ある程度の範囲の数値を表現できます。 むか〜しむかし、BASICで使った記憶が… | ||||||||||||||||
|
投稿日時: 2004-02-13 11:29
ほむらです。
------- ずっと疑問に思っていたのですけど >double型の0.0001を1万回足したら何になるか質問して見てください。 って結局いくつになるのですか? 正規化して0.1×10の-3乗になって 0.1が2進数では無理数だから。。。。 IEEE形式で考えると 符号ビット:0 指数部:1111111100 仮数部:1111..... ですよね? これを一万回足す?。。。プスプス(ボン! #思わず2の補数にしてしまったので修正 [ メッセージ編集済み 編集者: ほむら 編集日時 2004-02-13 11:40 ] | ||||||||||||||||
|
投稿日時: 2004-02-13 11:39
NAL-6295です。 正解です。以降の
の部分で、指摘されている事について説明しているつもりでした。 ちょっと乱暴な説明でしたが。 [ メッセージ編集済み 編集者: NAL-6295 編集日時 2004-02-13 11:40 ] | ||||||||||||||||
|
投稿日時: 2004-02-13 11:41
こんにちわ。
これって要するに「型」の話ですよね・・・ VBの固定小数型は、通貨型 (Currency) と小数型 (Decimal) です。 [MSDN] プログラム内部では、スケール付き整数型は、小数値を 10 という因数で乗算した整数として表します。 通貨型は 8 バイトのメモリを必要とし、数値を 15 桁の整数部分と 4 桁の小数部分で表し、–922,337,203,685,477.5808 〜 922,337,203,685,477.5807 の範囲の値をとります。 小数型は 12 バイトのメモリを必要とし、0 〜 28 桁の小数をとります。小数型は、バリアント型 (Variant) のサブタイプです。小数型を使用するには、変数をバリアント型として宣言し、CDec 関数を使用して変換します。 [/MSDN] で、たぶん、はにまるさんの「型」の認識はべつに間違っていないと思います。 単に、計算したときの誤差が出るか出ないかという話とはまったく関係ない事を 分かって頂ければ良いのではないでしょうか。 ※通貨型8バイト、小数型12バイトって・・・メモリ使いすぎ 多用したくないですね・・・ | ||||||||||||||||
|
投稿日時: 2004-02-13 11:47
IEEE 浮動小数点表現 によれば、仮数部は1以上2未満だから、 0.0001 = 1.6384×(2^(-14)) かな? これ以上は面倒くさいのでパス | ||||||||||||||||
|
投稿日時: 2004-02-13 11:51
NAL-6295です。 いくつになるんでしょう。 一応、結果的には .NETだと0.999999999999906まで表現 C++(Win32)だと0.99999999999990619まで表現 されるみたいですね。 1にならないという事が重要なので、あまり気にしたことはありませんでしたね。 | ||||||||||||||||
|
投稿日時: 2004-02-13 11:56
頭から湯気が出ています、はにまるです。
みなさま、フォローありがとうございます。
フォローありがとうございます。 なちゃさんの仰る通りです。それで考えていました... ただ、「浮動小数点表現」のIEEE規定では、基数部を「2」と定めているんですね、 ぢゃん♪さんから教えて頂いたHPを、先程見て確認しました... # ここが抜けていた。 ----------------------------------------------------- こう言う事でしょうか? 「固定小数点表現」は2つ手段がある 1.規定ビット以下の小数をマイナス2の累乗で計算する。 2.内部は整数のみで利用時に10の累乗を計算して利用する。 「浮動小数点表現」は1つのみ 3.IEEEが規定した基数部を「2」で考える手段 # 私は、ここの基数部を10で考えていました。 # それで、VBのCurrency が浮動小数点と勘違いした状態です。 <特徴> 1.速度:〇 誤差:出易い 表現範囲:△ 2.速度:△ 誤差:無し 表現範囲:× 3.速度:× 誤差:出難い 表現範囲:◎ # 編集-追記 bQの説明が途中から抜け落ちていました。 [ メッセージ編集済み 編集者: はにまる 編集日時 2004-02-13 12:37 ] |