- PR -

小数点を求める場合。

投稿者投稿内容
たーぞう
ぬし
会議室デビュー日: 2003/08/08
投稿数: 317
お住まい・勤務地: お花畑
投稿日時: 2004-01-24 02:14
つーか。
そもそも有限桁の2進数で10進数の0.05を表現することはできないわけですね。

有限桁の2進数で表現できる10進小数は、
0.5,0.25,0.125,0.0625,0.03125,0.015625,…
およびこれらの数の和です。

ああ、なんでこんな時間に会社にいるんだろ。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-01-24 09:22
unibon です。こんにちわ。

引用:

たーぞうさんの書き込み (2004-01-24 02:14) より:
そもそも有限桁の2進数で10進数の0.05を表現することはできないわけですね。


「表現」の定義にもよりますが、
コード:

double a = 0.05;
System.out.println("a = " + a);


では 0.05 が表示されますので、「表現」はできています。
Java はコード中に文字列として書いた数値(上記の 0.05)を double 型に変換した後、再び文字列に戻しても元に戻る(0.0000001 とか 0.9999999 のような端数が出ない)、という仕組みになっていますが、これって結構複雑なロジックなんだと思います。JDK に付属のソースコードに2進数→10進数の変換用の、非 public なクラスがありますが、かなり長大なコードになっています。
ただ、やはりおっしゃるように有限の桁数を使っていますので、ひとたび演算すると、元に戻らなくなってしまいます。


#あとでコードの間違いを修正(2行しかないのに)。

[ メッセージ編集済み 編集者: unibon 編集日時 2004-01-24 09:24 ]

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