
以下のような簡単なプログラムを書いて実行させたところ、小数点表示の挙動がおかしくなりました。
###プログラム ここから
#!/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が足される現象をやめさせたいです。原因、解決策等おわかりであれば教えていただけないでしょうか。よろしくお願いします。
No.1ベストアンサー
- 回答日時:
>原因、解決策等おわかりであれば
「浮動小数点 誤差」で検索して下さい。
今回の場合、増分が0.001なので……
1000倍の下駄を履かせて扱う。って方法があるかと。
「固定小数点 下駄」辺りで検索して下さい。
ご返信ありがとうございました。調べてみました。
・コンピューターの実際の計算では、2進法を使っているので小数点を扱う際に不都合が出てくる場合がある。
・そこで、整数にて繰り返し文を行い、誤差の蓄積を防ぐ。
以上のような理解であっているでしょうか。これを踏まえてプログラムを書き換えると以下のようになりますが、確かにこれでうまくいきました。ありがとうございました。
for(my $i=10;$i<=1000;$i+=1)
{
print $i/1000,"\n";
}
しかし、ここでもう一つ疑問が浮かぶのですが、確かにこの「浮動小数点」に関するウェブページはたくさん存在しているものの、小数の代わりに一旦整数を用いるような以上の手法は日常的にプログラミングをされているプログラマーの方も一般的に用いる手法なのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlのプログラミング 部分入れ...
-
Perlでファイルの末尾から指定...
-
テキストファイルで提出とは?
-
perl の open について教えてく...
-
Perl言語について。
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
Perlで時間の計算
-
perlについて
-
perlのrequireの動き方について...
-
perlの構文でカンマの意味が分...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CLispのloop内の挙動について
-
Pythonのプログラミングの質問...
-
Perlで use strict して our変数
-
プロトタイプ宣言のワーニング...
-
Perlで自分自身の関数名を知る...
-
dieやPerl自体でエラーが発生し...
-
内部処理形式が日付型 (Date) ...
-
Pythonのマルチプロセスでの並...
-
HASH(0xほげほげ)
-
10進数→2進数
-
Telnetモジュールで繋がりません。
-
数値の多い順に別々の処理をす...
-
Perlで複数の値を返す良い方法...
-
Perlで足し算をするには
-
[perl] next と return 同じ意...
-
親ループのループ変数$_を子ル...
-
Net::SSH::Perlについて
-
PerlでCabochaを呼び出すには(...
-
Perlのプログラミングに困って...
-
JSONで文字列が長い時
おすすめ情報