私に何ができる?
残念ながら、根本的な問題には何もありません。あなたのプラットフォームでは、1.414 は正確な double 表現を持っていません。のどこにも「1.414」を配置できないため、「1.414」で計算を実行することはできません double
。
たとえば、http://www3.ntu.edu.sg/home/ehchua/programming/java/DataRepresentation.htmlを参照してください。
できることは、数値を最大の精度で維持し、精度を下げて表示することです。マシンの精度を計算し、計算中にエラーを追跡する必要があります。
したがって、1.413999999999997 を使用すると、最終的に 41.99999137 という答えが得られます。あなたが表示するもの
printf("The answer is %.3f\n", theAnswer);
または、プラットフォームを変更することもできます (コンパイラ、数学ライブラリ、または浮動小数点表現、たとえばlong double
サポートされている場所で使用)。ただし、1.414 を正しく取得するには、たとえば 1.873 を間違って取得するという代償を払う必要があることを忘れないでください (1.87299999999 または 1.87300000001 としてください)。 、そして計算には多かれ少なかれ同じエラーがあります。
整数演算では、最初の数値に 1,000,000 (および 1414000 を取得) または別の適切なスケールを掛けてから、最後に除算することができます。ただし、整数には上限があります。
GMP ( http://gmplib.org/ )のように、別の内部表現を使用し、必要な方法で精度を指定できる Arbitrary Precision Libraries もあります。もちろん、それで作業することは、指定するよりも困難です
op1 = 6.0;
op2 = 7.0;
theAnswer = op1 * op2;
処理も遅くなりますが、結果は良好です。