zou*_*oul 8 floating-point precision calculator
我想知道计算器如何精确地工作.例如,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;
}
Run Code Online (Sandbox Code Playgroud)
现在我肯定想在用户输入sin(π)时打印零.我可以轻松地在1e-15的某个地方绕过来使这个特殊情况起作用,但这是一个黑客,而不是解决方案.当我开始像这样循环并且用户输入类似1e-20的东西时,他们得到零回归(因为四舍五入).当用户输入1/10并=重复点击键时会发生同样的事情- 当他达到舍入阈值时,他会得到零.
然而,有些计算器为sin(π)返回纯零,同时它们可以舒适地处理诸如(1e-20)/ 10之类的表达式.诀窍在哪里?
小智 6
桌面计算器使用任意精度数学库.这些可以配置为具有更高的精度,加倍.手持式计算器(传统专用和移动电话)使用固定精度数学库.
如果要准确打印零,请使用宽度说明符
printf (%12.4d, number);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2935 次 |
| 最近记录: |