您的问题是
1.1,或
6.6都无法在二进制浮点中精确表示。所以当你输入
double l = 1.1;double x = 6.6;
您将获得2个存储在
l和中的数字
x,它们与
1.1和略有不同
6.6。之后,
int segmentId = (int)floor(x/l);为那些稍有不同的数字确定正确的段,而不是为原始数字确定正确的段。
您可以通过使用十进制浮点数据类型而不是二进制来解决此问题。您可以检查C
十进制数据类型和C 的精确十进制数据类型吗?库,或者自己实现十进制数据类型。
但是对于数字,仍然存在问题,这些数字在有限的十进制浮点数中无法表示,例如
1/3(循环分数),
sqrt(2)(无理),
pi(超越)等。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)