克服浮点数的精度问题
浮点数是计算中广泛使用的数据类型,由于存在潜在的精度问题它们在机器中的内在表征。为了说明这个问题:
#include <stdio.h> #include <stdlib.h> int main() { char *str = "4.600"; double mw = atof(str); float p = 0.2; float g = 0.2; int h = 1; int columns = (int)((mw - (h * 11 * p)) / ((h * 11 * p) + g)) + 1; printf("%f\n", (mw - (h * 11 * p)) / ((h * 11 * p) + g)); printf("Columns: %d\n", columns); return 0; }
在此代码中,str 是“4.600”的字符串表示形式,调用 atof(str) 将其转换为 double mw。随后的计算产生了一个不幸的结果:4.5999999999999996 的浮点表示形式无法精确表示所需值 4.600。
解决问题
如解决方案所突出显示,用浮点运算实现精确相等实际上是不可能的。相反,最好比较可接受范围内的值。在某些情况下,必须认识到特定值无法准确表示为浮点数。
推荐资源
有关更多见解,请参阅以下参考资料:
以上是我们如何克服浮点运算的精度问题?的详细内容。更多信息请关注PHP中文网其他相关文章!