電子書籍の厳選無料作品が豊富!

以下のような簡単なプログラムを書いて実行させたところ、小数点表示の挙動がおかしくなりました。

###プログラム ここから
#!/usr/bin/perl
use strict;
use warnings;

for(my $i=0.01;$i<=1;$i+=0.001)
{
print $i,"\n";
}
###ここまで

##結果 ここから
.
.
.
0.685
0.686
0.687
0.688000000000001
0.689000000000001
0.690000000000001
##ここまで

以上のように、0.001づつ増加する $i に途中から000000000001が加わってしまいます。この000000000001が足される現象をやめさせたいです。原因、解決策等おわかりであれば教えていただけないでしょうか。よろしくお願いします。

A 回答 (1件)

>原因、解決策等おわかりであれば



「浮動小数点 誤差」で検索して下さい。

今回の場合、増分が0.001なので……
1000倍の下駄を履かせて扱う。って方法があるかと。
「固定小数点 下駄」辺りで検索して下さい。
    • good
    • 0
この回答へのお礼

ご返信ありがとうございました。調べてみました。

・コンピューターの実際の計算では、2進法を使っているので小数点を扱う際に不都合が出てくる場合がある。
・そこで、整数にて繰り返し文を行い、誤差の蓄積を防ぐ。

以上のような理解であっているでしょうか。これを踏まえてプログラムを書き換えると以下のようになりますが、確かにこれでうまくいきました。ありがとうございました。

for(my $i=10;$i<=1000;$i+=1)
{
print $i/1000,"\n";
}

しかし、ここでもう一つ疑問が浮かぶのですが、確かにこの「浮動小数点」に関するウェブページはたくさん存在しているものの、小数の代わりに一旦整数を用いるような以上の手法は日常的にプログラミングをされているプログラマーの方も一般的に用いる手法なのでしょうか。

お礼日時:2013/02/20 16:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!