電卓はどのように正確に機能するのだろうか。たとえば、精度sin(M_PI)
で計算した場合、の値は正確にゼロではありません。double
#include <math.h>
#include <stdio.h>
int main() {
double x = sin(M_PI);
printf("%.20f\n", x); // 0.00000000000000012246
return 0;
}
ここで、ユーザーがsin(π)を入力したときにゼロを出力したいと思います。この特定のケースを機能させるために、1e–15のどこかで簡単に丸めることができますが、それはハックであり、解決策ではありません。私がこのように丸め始め、ユーザーが1e–20のようなものを入力すると、(丸めのために)ゼロが返されます。ユーザーが1/10を入力し、=キーを繰り返し押すと、同じことが起こります。丸めのしきい値に達すると、ゼロになります。
それでも、一部の計算機はsin(π)に対してプレーンゼロを返し、同時に(1e–20)/10などの式を快適に処理できます。トリックはどこにありますか?