以下のような簡単なプログラムを書いて実行させたところ、小数点表示の挙動がおかしくなりました。
###プログラム ここから
#!/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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- Perl perlをバージョンアップしたら、今まで正常に動いていたプログラムが、エラーになってしまった 3 2022/10/05 15:44
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- その他(プログラミング・Web制作) Pythonでこのプログラミングを作成するには 2 2022/10/25 21:19
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- その他(プログラミング・Web制作) Pythonでこのプログラミングを作りたいのですが 1 2022/10/24 18:56
- PHP PHP ページング データベース 1 2022/06/16 10:30
- Ruby プログラミング 3 2023/06/09 14:30
- Perl perlについての質問 2 2022/10/17 15:25
- その他(プログラミング・Web制作) pythonリストの特定の値を表示htmlで表示できない 2 2022/05/14 05:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プロトタイプ宣言のワーニング...
-
CGIから複数の別プログラムを同...
-
Pythonのマルチプロセスでの並...
-
Application.ScreenUpdating = ...
-
JSONで文字列が長い時
-
メモリをアドレスを直接指定し...
-
SELECT OPTIONの中身をコピペ...
-
FindFirst を複数条件で検索
-
【至急!!!】python言語で本を見...
-
構造体の各データの表示につい...
-
文字の横にプルダウンを表示さ...
-
ACCESS テキストボックスを隙...
-
セレクトメニューで2つの項目...
-
UWSCのSELECT文の記述方法
-
16進の10進変換について
-
formで特定のinputを送信しない...
-
テーブル内でドロップダウンメ...
-
「*:*」って何を意味するのでし...
-
C言語のflagの使い方が分かりま...
-
c言語 16進数の2進数への変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CLispのloop内の挙動について
-
Perlで自分自身の関数名を知る...
-
Net::Telnetでタイムアウト時間...
-
print <<"_HTML_"の中でサブル...
-
10進数→2進数
-
Rubyのgets関数について
-
作業域が消える(ように見える)
-
CGI初心者です
-
Perlで複数の値を返す良い方法...
-
検索機能の作成で困っています
-
ハノイの塔の問題で困っており...
-
foreach 回数制限
-
Pythonのマルチプロセスでの並...
-
LISPで連想配列の操作?
-
PERLの「!=」と「=~」 or...
-
Wコロン
-
PerlでCabochaを呼び出すには(...
-
シェルでawkを使い行数を取り出...
-
Perlですが、redoの処理がいま...
-
icmp socket error
おすすめ情報