我有一个很长的双精度值 x。该值实际上是 3.00。但在调试器中,我看到的值为 3.00000000000012312414,这是小数点后第 13 位后的一些垃圾值。我该如何丢弃这些垃圾?如果我必须打印,我可以写printf("%.10llF",x);
,但如果数字是整数,我必须比较。一种比较方法是long long xt = x; if(x == xt)
我将只取第 12 位之前的值。但是对于垃圾值,这是行不通的。我怎么做?
问问题
1162 次
2 回答
2
That is not garbage it is how floating point numbers are stored. To compair floating point numbers you always need to define an acceptable error e. When you compare x to y if the abs(x -y) < e the numbers are equal. Also take a look at this document
于 2013-08-16T22:17:24.173 回答
0
您应该使用一些 epsilon 来比较浮点值。
3.00000000000012312414
不能被表示,3.000000000000000000
因为数字的计算机表示不是那么精确。如果它应该恰好是 3,则必须将其声明为整数。
于 2013-08-16T22:18:53.633 回答