- PR -

[基礎]固定小数と浮動小数について

投稿者投稿内容
りばぁ
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 130
お住まい・勤務地: 愛知県
投稿日時: 2004-02-13 12:04
あのぅ・・やっぱり何か勘違いされてる気が・・・

変数に代入する時点では、どんな型でも誤差は出ませんよ?

逆に計算する時にはどんな型を使っても誤差が出る可能性はあります。
はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2004-02-13 12:31
はにまるです。

 りばぁさん、申し訳ありませんが明確にしてもらえませんか?

 何の意見が異なるのか?訂正するなら、それを明記しないと
 話が進まないと思うのですが?
 
 今までの文書でも
 私が勘違いしている所を指摘されていないですよね?
 
 「はにまるは、勘違いしている。」この文書が1対1ならいいのですが、
 他の方が、その文書を見たい場合、
 「あ〜、はにまるは勘違いしてんだ、教えなきゃ!」って思いますよね?
 その軌道修正は大変です。
 
 ご考慮の程、御願い致します。
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2004-02-13 12:40
ども、ほむらです。
---------
ぢゃん♪氏へ
引用:

IEEE 浮動小数点表現
によれば、仮数部は1以上2未満だから、
0.0001 = 1.6384×(2^(-14))
かな?


あっしまった。つい10進数で考えてしまいました。
-14乗ですか。。
すみません。気合が足りなかったようです^^;;;


NAL-6295氏へ
引用:

いくつになるんでしょう。
一応、結果的には
.NETだと0.999999999999906まで表現
C++(Win32)だと0.99999999999990619まで表現
されるみたいですね。


僕のほうでもperlとかJScriptで実験してみたのですけど
指数表記(xxxe+xxx)になってしまってわけがわからず。。

挙句の果てには
内部表現形式にひっかかったらしく無限大(?)になってしまいました。。。(オーバーフロー?)
(1.#INF)


>1にならないという事が重要なので、あまり気にしたことはありませんでしたね。
1にならないという話は良くきくのですけどその現実を何に役立てるのかが
結びつかないのですよね。。。
プログラムの関係で浮動小数点はよく利用するのですけど
第3位くらいまでしか扱ったことがなく。。。

はにまる氏へ
>「浮動小数点表現」は1つのみ
ん〜、一応IBM形式というのもあったはずです。
汎用機の世界でしたっけ?

固定小数点表記はその名前のとおり、小数点の位置は固定で
プログラムの表現として基数に基づいた累乗処理をしていて
たとえば、100.5という形

浮動小数点表記は累乗の値を別にもっていてそれで小数点の位置を表現しているとか?
たとえば、1.005e+3という形(?) ←怪しい^^;;;;
はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2004-02-13 12:45
引用:

ほむらさんより:
はにまる氏へ
>「浮動小数点表現」は1つのみ
ん〜、一応IBM形式というのもあったはずです。
汎用機の世界でしたっけ?

固定小数点表記はその名前のとおり、小数点の位置は固定で
プログラムの表現として基数に基づいた累乗処理をしていて
たとえば、100.5という形

浮動小数点表記は累乗の値を別にもっていてそれで小数点の位置を表現しているとか?
たとえば、1.005e+3という形(?) ←怪しい^^;;;;


とすると、

「内部は整数で保持し、利用時に10の累乗で計算する方式」は、
固定小数点表記 とは言わない方が良いですね!

これが、混乱の原因か...失礼しました ^^;

で、素朴な質問、
「内部は整数で保持し、利用時に10の累乗で計算する方式」は
一般的に何て言うのでしょう?
りばぁ
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 130
お住まい・勤務地: 愛知県
投稿日時: 2004-02-13 12:49
こんにちわ。

引用:

はにまるさんの書き込み (2004-02-13 12:31) より:
はにまるです。

 りばぁさん、申し訳ありませんが明確にしてもらえませんか?

 何の意見が異なるのか?訂正するなら、それを明記しないと
 話が進まないと思うのですが?
 
 今までの文書でも
 私が勘違いしている所を指摘されていないですよね?
 
 「はにまるは、勘違いしている。」この文書が1対1ならいいのですが、
 他の方が、その文書を見たい場合、
 「あ〜、はにまるは勘違いしてんだ、教えなきゃ!」って思いますよね?
 その軌道修正は大変です。
 
 ご考慮の程、御願い致します。




毎回ちゃんと指摘しているのですが、読んでいただけてないだけでは?
今回のも、投稿日時: 2004-02-13 11:41
で説明しているのですが・・・

※投稿が重なったりして、前の書込みなどはスルーされているのですかね・・・

--追加
> 今までの文書でも私が勘違いしている所を指摘されていないですよね?

このもとになったスレッドでの事をおっしゃられているのだと思いますが、
これもちゃんと返答しているんですけどね・・・



[ メッセージ編集済み 編集者: りばぁ 編集日時 2004-02-13 12:55 ]
ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2004-02-13 12:58
引用:

りばぁさんの書き込み (2004-02-13 12:04) より:

変数に代入する時点では、どんな型でも誤差は出ませんよ?


実数に関しては、その考えは捨てたほうがよいでしょう。

たとえばC#で、
コード:
float f = 0.1f;


と書いたら、コンパイルした瞬間「0.1f」側で誤差が発生します。
で、変数 f に入るのは「0.1の近似値」です。

引用:

IEEE 浮動小数点表現 より:

1/10 は、2 進では反復小数です。仮数はわずかに 1.6 より小さくなり、バイアスされた指数は 1.6 を 16 で割ることを示しています。つまり、2 進の 011 1101 1、10 進の 123 になります。実際の指数は 123 - 127 = -4 であり、乗数が 2**-4 = 1/16 であることを示しています。格納された仮数は最後のビットで丸められているので表現できない値ですが、最も近い値になっています。1/10 や 1/100 を 2 進で正確に表すことができないのは、10 進で 1/3 を正確に表せないのと同じです。


ということです。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-02-13 13:00
unibon です。こんにちわ。

引用:

ほむらさんの書き込み (2004-02-13 11:29) より:
ほむらです。
-------
ずっと疑問に思っていたのですけど
>double型の0.0001を1万回足したら何になるか質問して見てください。
って結局いくつになるのですか?
正規化して0.1×10の-3乗になって
0.1が2進数では無理数だから。。。。


憶測ですが、「0.1は2進数では有限小数ではない(循環小数である)」、ということを書かれたかったのかと思います。
#ちなみに、何進数かに関係なく0.1(1の10分の1)は有理数です。

なお、VB だと、1万回のループ中で数値を一旦文字型に変換すると、結果はちょうど1にできます。
http://www.geocities.co.jp/SiliconValley/4334/unibon/asp/valueerror.html
#VB.NET とかだとどうなのかは分かりませんが。
りばぁ
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 130
お住まい・勤務地: 愛知県
投稿日時: 2004-02-13 13:03
引用:

ぢゃん♪さんの書き込み (2004-02-13 12:58) より:
引用:

りばぁさんの書き込み (2004-02-13 12:04) より:

変数に代入する時点では、どんな型でも誤差は出ませんよ?


実数に関しては、その考えは捨てたほうがよいでしょう。

たとえばC#で、
コード:

float f = 0.1f;


と書いたら、コンパイルした瞬間「0.1f」側で誤差が発生します。
で、変数 f に入るのは「0.1の近似値」です。

引用:

IEEE 浮動小数点表現 より:

1/10 は、2 進では反復小数です。仮数はわずかに 1.6 より小さくなり、バイアスされた指数は 1.6 を 16 で割ることを示しています。つまり、2 進の 011 1101 1、10 進の 123 になります。実際の指数は 123 - 127 = -4 であり、乗数が 2**-4 = 1/16 であることを示しています。格納された仮数は最後のビットで丸められているので表現できない値ですが、最も近い値になっています。1/10 や 1/100 を 2 進で正確に表すことができないのは、10 進で 1/3 を正確に表せないのと同じです。


ということです。



あ、そうですね^^;そういうふうに代入するとダメですね・・・
申し訳ないです。


[ メッセージ編集済み 編集者: りばぁ 編集日時 2004-02-13 13:42 ]

スキルアップ/キャリアアップ(JOB@IT)