- 締切済み
プログラムする言語によって精度は変わる?
当たり前のことかもしれませんが 同じ計算をするプログラムを作っても double型の計算をした場合 計算結果が変わるものでしょうか? CとCOBOLを比較した結果違いがでました。 なんで違うのか説明が載っているものは どこかにあるでしょうか?
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- zwi
- ベストアンサー率56% (730/1282)
>検索した知識ですがCOBOLには浮動小数ってないのでは COBOLにもdouble型はあります。int型も。 ・PIC 999.なら文字型。 ・PIC 999 COMP.でパック型。 ・COMP-2.ならたしかdouble型です。 昔の記憶なので、型の書き方は間違ってるかも知れませんが。 参考まで。
- memphis
- ベストアンサー率40% (975/2395)
C言語の場合、CPU/OSで違ったりします。 また、コンパイルオプションでも計算精度は違います。 この辺りの話しは検索すれば多くの情報が出てきますので一度は見るといいでしょう。
- php504
- ベストアンサー率42% (926/2160)
検索した知識ですがCOBOLには浮動小数ってないのでは 整数部の桁数と小数部の桁数を自分で決めて1桁1バイトとかで10進演算するので小数演算の結果が違うのはあたりまえです メモリは無駄になりますが誤差が出ないですね
- nasu0327
- ベストアンサー率14% (7/50)
複雑な計算を一気に求めたりする計算式の場合、 (答でない)中間結果に対する値の精度が、言語により異なる事があります。 あとは、有効桁数 Cobolだと18桁まで定義できますが、他の言語はどうでしょう?
- Willyt
- ベストアンサー率25% (2858/11131)
コンパイラーが計算をする場合、一つの数字にどれだけの桁数を割り当てるかは設計によってすべて異なりますからCの結果とCOBOLの結果に違いが出て来るのは当然です。これは実数計算の場合に桁落ち現象がどうしても起きるので、その影響が出るのです。たとえば、1.04と1.03 を計算するとき、3桁の計算なら2.07で、二桁をとると2.1となりますが、2桁しか割り当てないと2.0になってしまいます。これを繰り返すとかなりの差が出て来ることが起き得ます。
- zwi
- ベストアンサー率56% (730/1282)
単純な加減算・除乗算の場合は表示上の丸め誤差以外は差がないと思います。ただし、関数が入ってくると関数の作り方の違いで差が出る可能性は高いです。 この場合は、お使いの言語の関数ごとに誤差について書かれた資料を探す必要があります。CだからCOBOLだからの問題ではないです。同じCOBOLでもメーカーごとに違うと思います。
- Tacosan
- ベストアンサー率23% (3656/15482)
実際にどういう処理系でどのような型のデータに対しどのような処理をしたのか, あるいは「計算結果が変わる」といっても「どの程度変わるのか」(計算が無意味になるくらい違うのか, それとも本当にわずかに違うだけなのか) がわからないから抽象的にならざるを得ませんが, 言語が違えば同じ計算に対し違う実装をしていても不思議ではないし, その結果として計算した答えが違ったとしてもおかしくはない.