【发布时间】:2009-09-16 12:20:24
【问题描述】:
在编程竞赛中,与浮点运算相关的问题说“错误是答案必须小于 1e-6”或“答案必须正确到小数点后 6 位”。这是否意味着我可以对 FP 变量执行计算而不用担心精度,并且只有在打印时我应该像这样写
printf("%.6lf",a);
我理解正确吗?以上2个引号是不是同一个意思? 在其中一个问题中,当我使用双精度数组并执行一些计算并打印其中一个数组元素时。它打印了“-0.000000”。这是什么意思? 但是当我在 C++ 中使用向量时,比如
vector<double> arr(10,0.0);
同样的计算打印出“0.000000”。为什么会有这样的区别?
【问题讨论】:
-
为了尽可能地保持精度,你必须优化你的计算(例如,不要将具有非常不同的指数值的数字相加,不要将太小或太大的数字相乘。而是将小数字与大数字相乘如果可能,对细分进行排序,使 sub 结果的 abs 大约为 1.0 .. 等等)
标签: c floating-point