重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

仕事上いろんな数値計算ソフトを使っていて日ごろ疑問に思っていることです。

あるソフトAでファイルに数値データを書き込んで、それをほかのソフトBで読み込むと若干違っている事があります。例えば”0.00003906250000” →”0.00003906249991” みたいな具合です。いろいろ考えたのですがよくわかりません。自分でソフトを作るほどの知識は無いのですが、一般的にこれはどういうことなのでしょうか?

====

・そもそもソフトAとソフトBの開発言語がVBだったりVC++だったりします。
・Aで用いた変数が単精度、Bで倍精度だった場合にAでそもそもきちんと表現されていない?
・ファイルの書式上、書き込み場所が32bitしかない場所にそれ以上必要な長い桁数のデータを書いた?

まずソフト側(や言語)に原因があるのか、ファイルの書式側に原因があるのかだけでも知りたいと思います。

A 回答 (1件)

ファイルの書式が原因ということではありません。


ファイルの書式が原因なら数値自体を正しく読み込めなくなり、端数の誤差どころではありません。


コンピュータ内部では、数値は2進数で表現されていることは知っていると思いますが、
2進数のままでは人間には理解しづらいのは、画面に表示するときやファイルの出力するときには、10進数に変換しています。
(ファイルの場合は2進数のままの場合もありますが)

2進数から10進数にするとき、10進数から2進数にするときに、有効桁を超える端数は切り上げ、切り捨て、四捨五入などの端数処理をしています。
このときの端数処理の仕方や10進数の有効桁数がソフトによって異なります。
同じソフトの中でも、ある2進数の数値を「2進数→10進数→2進数」と変換したとき、元の2進数に戻るとは限りません。
「10進数→2進数→10進数」の場合も同様です。
ましてや、精度が違ったりソフトが違ったりすれば誤差が出てくるのは当然のことです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。桁数的に見て確かにIEEEの規格にはまらないほど小さな数字でもないと思うので言語側にあるのでしょう。

お礼日時:2011/11/22 17:08

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