dポイントプレゼントキャンペーン実施中!

先日、気付きました
7.84-8.19=-0.349999999999999999

デフォルト設定でも再現致します

また、下記は問題ありませんし
自力では原因を切り分け出来ずにおります
7.84-8.18=-0.34
7.84-8.20=-0.36

いったい、どのようにして
このような違いが出るのかが不思議でたまりません


正直、電卓ソフトで計算ミスは致命的かとも思いますが
数年使ってきて初めてですし
正直、困惑しております

作者様への要望も考えましたが
開発&サポート終了との事ですので、まずはこちらへの質問の運びとなりました
http://hatenachips.blog34.fc2.com/blog-entry-10. …


原因や自力での対処法等が知りたいです

お詳しい方、おりましたら
なにとぞ、よろしくお願い致します

Win7 32、64

A 回答 (1件)

>正直、電卓ソフトで計算ミスは致命的かとも思いますが


>数年使ってきて初めてですし
>正直、困惑しております

小数点使っているものだと、誤差が出る場合があります。
「単精度浮動小数点数」辺りで検索して見て下さい。

ということで…
VC++2010Expressで下記のようなコードを記述&実行してみました。
#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
 float a1 = 7.84;
 float b1 = 8.19;
 double a2 = 7.84;
 double b2 = 8.19;

 printf("a1 - b1 = %f\n", a1-b1);
 printf("a2 - b2 = %f\n", a2-b2);

 return 0;
}

a1 - b1 = -0.349999
a2 - b2 = -0.350000
という表示結果になります。
「浮動小数点 誤差」辺りで検索して下さい。
double型の場合は誤差が出るまでの制度が変わります。

>原因や自力での対処法等が知りたいです

面倒ですが、他のソフトを探す…ということになるかと。
ソースコードが公開されている。とかであれば、自分のところで修正して…ということも可能でしょうが、
作者が修正していない。ということはビルド環境がない。といいう可能性もあります。
例えばVisual C++6.0で作っていたものだった…という場合は、最新OSは既にサポート外です。
# 一応、動かそうと思えば動くでしょうが、Microsoftがサポート外と言っている状態でなんか問題が発生した場合に面倒事に巻き込まれることも無いとは言い切れません。
新しいビルド環境にコンバートも可能ではありますが、いろいろと調整が必要になる場合もありますので、その手間なども含めて未サポートになっている可能性もあります。
    • good
    • 1
この回答へのお礼

貴重なお時間を割いて頂き感謝致します

幾つかのソフトを試しましたが
確かに二通りの答えに別れました

Wr5様のご回答には、とても安心感があり
内容自体はとても、私には難しいのですが
なんとなく、理解出来た位の感覚になってしまっておりますw

Wr5様のように博学になれたら
なんて、妄想してしまいます


どうもありがとうございました!

お礼日時:2015/06/08 12:49

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