gpt4 book ai didi

C 双和错误

转载 作者:太空宇宙 更新时间:2023-11-04 01:13:38 25 4
gpt4 key购买 nike


有谁能给我解释一下为什么这个程序的执行会进入不可行的if?
我知道 double 和 float 存在精度问题,但我无法弄清楚这个例子中的问题..

提前致谢!

注意:我是在 Ubuntu 10.10 下用 GCC 4.4.5 编译的

#include <stdio.h>

#define NUM_JOINTS 1

typedef struct {
double t1;
double t2;
double t3;
} jointProfile;

jointProfile jp[NUM_JOINTS];

int main() {
jp[0].t1 = 0.51639777949432230652604403076111339032649993896484375;
jp[0].t2 = 0.00000000000000000000000000000000000000000000000000000;
jp[0].t3 = 0.77459666924148340427791481488384306430816650390625000;

double maxTime = (jp[0].t1 + jp[0].t2 + jp[0].t3);

if ((jp[0].t1 + jp[0].t2 + jp[0].t3) < maxTime) {
printf("Infeasible\n");
}

return 0;
}

最佳答案

嗯,显然你对浮点计算的精妙之处还不够了解。

参见例如http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html

如果您在 32 位 Ubuntu 上执行此操作,问题很可能是 maxtime 溢出到内存,因此丢失了位。

一个解决方法是将条件更改为


if (fabs(jp[0].t1 + jp[0].t2 + jp[0].t3 - maxtime) < DBL_EPSILON) {
...
}

关于C 双和错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6387867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com