HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0916
ちたん実数値の端数2解決


ちたん

リンク

2006/9/16(Sat) 19:22:22|NO.2479

こんにちは、新掲示板では初めてのカキコです。
ちょっと気になったので報告だけしておきます。
実数の小数部の7桁以降の処理なのですが、
処理だけを見ているとそれ以降を四捨五入しているみたいですが、
少しズレがあるみたいです。


ddim res,1 res=0.0000001 mes "0.0000001=>"+res res=0.0000004 mes "0.0000004=>"+res res=0.0000005 mes "0.0000005=>"+res res=0.0000006 mes "0.0000006=>"+res res=0.0000009 mes "0.0000009=>"+res res=0.0000004+0.0000001 mes "0.0000004+0.0000001=>"+res res=0.0000004+0.0000002 mes "0.0000004+0.0000002=>"+res mes res stop

上記の計算で、
0.0000005では繰り上げにならず、
0.0000006で繰り上がります。
これは仕様なのかどうかわかりませんが、
このままだと、精確ではない気がします。

あと、7桁以降の扱いはできるのでしょうか?

どなたか詳しい方、教えてください。



この記事に返信する


LonelyWolf

リンク

2006/9/16(Sat) 22:05:16|NO.2481

double型の仕様です。今後、このままである保証は無いですが。
0.000005で四捨五入されないのはdouble型で厳密に0.0000005と
扱えないことに起因します。

mes strf("%.30f", 0.0000005)のように表示する桁数を増やすと
分かるのですが実際には0.0000005より小さい値になっています。
逆にmes strf("%.30f", 0.1)とすると、0.1より若干大きい値になっています。

これらは、数字を「2進法」で扱うために生じる「丸め」による誤差の影響です。

7桁以降の扱いも可能ですが、「有効数字」何桁かが問題になります。
(10進数での桁とは細かいずれがありますが…)

この問題で重要なポイントにはカギ括弧をつけています。
知らない言葉だったときは検索してみてください。



ちたん

リンク

2006/9/17(Sun) 03:35:05|NO.2485

先にネットで「double型 誤差」で調べるべきでした(^^;)。
double型は細かいズレが生じること
それが仕様なのだと分かっただけでも感謝です。
ありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.