質問: sqrt(2.0); printf(" 電卓計算: 1.41421356237\n"); printf(" double型計算: %.15f\n",b); printf(" float型計算: %.15f\n",a); /*実行結果 電卓計算: 1.41421356237 double型計算: 1.414213562373095 float型計算: 1.414213538169861 */ return 0; } ```
回答: ざっくり話します。 基本的に浮動小数点数は近似値であるため、そもそも浮動小数点数を使う時点で(例外はあるものの)誤差は当然あると考えるべきです。 あとは、計算を工夫して、なるべき浮動小数点数をださないようにして、誤差の影響を小さくできるかどうかです。 C言語にはないかもしれませんが、端数を扱うのに、固定小数点数や分数の型を使う方法があります。Ruby, Python, Crystal などの言語にはあります。 また、分数のように分母と分子をわけて計算するような形にしたり、計算の順序を入れ替えたり、10倍・100倍などして整数で計算して最後の結果を10・100で割ったりして、計算をできるだけ整数の型で計算するようにして、最後に浮動小数点数になるように計算するのが対処法だと思います。