【发布时间】:2012-11-22 12:42:20
【问题描述】:
我有一个函数可以根据[0, 1] 范围内的值计算 3d 中的点。 我面临的问题是,二进制浮点数不能完全表示 1。
在函数中求值的数学表达式能够计算 t=1.0 的值,但该值永远不会被函数接受,因为它会在计算之前检查是否为范围。
curves_error curves_bezier(curves_PointList* list, curves_Point* dest, curves_float t) {
/* ... */
if (t < 0 || t > 1)
return curves_invalid_args;
/* ... */
return curves_no_error;
}
如何使用此函数计算t=1.0 处的 3d 点?前段时间我听说过一个关于ELLIPSIS 的消息,我认为这与此类问题有关,但我不确定。
谢谢
编辑:好的,对不起。由于我面临的问题,我假设浮点数不能完全代表 1。问题可能是因为我正在做这样的迭代:
for (t=0; t <= 1.0; t += 0.1) {
curves_error error = curves_bezier(points, point, t);
if (error != curves_no_error)
printf("Error with t = %f.\n", t);
else
printf("t = %f is ok.\n", t);
}
【问题讨论】:
-
嗯,你能用十进制吗?
-
binary floating-point number cannot represent exactly 1are you sure? 1.) 小数在 2 的基数中具有无限小数位存在问题 2.) 数字太小而无法精确表示 3.) 数字太大而无法在不损失精度的情况下表示。但是 1.0 都不是! -
“我面临的问题是,二进制浮点数不能精确地表示 1。”
-
对不起,我认为它不能代表 1,在研究之前不应该这样做。请查看我的编辑。
-
您可能听说过
EPSILON,而不是ELLEPSIS。
标签: c floating-point floating-accuracy