gpt4 book ai didi

c++ - 浮点比较的奇怪结果

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:54:10 25 4
gpt4 key购买 nike

我有这个简单的测试:

double h;
...
// code that assigns h its initial value, used below
...
if ((h>0) && (h<1)){
//branch 1 -some computations
}
else{
//branch 2- no computations
}

我列出了我的值(value)观,因为我得到了一些非常奇怪的结果,例如:h=1 然后到达第一个分支,我不明白为什么,因为如果 h=1 我想计算 branch2。
我会被如此明显的事情弄糊涂吗?


编辑:

这就是我计算然后使用 h 的方式:

double* QSweep::findIntersection(edge_t edge1,edge_t edge2) {  
point_t p1=myPoints_[edge1[0]];
point_t p2=myPoints_[edge1[1]];
point_t p3=myPoints_[edge2[0]];
point_t p4=myPoints_[edge2[1]];

double xD1,yD1,xD2,yD2,xD3,yD3,xP,yP,h,denom;
double* pt=new double[3];

// calculate differences
xD1=p2[0]-p1[0];
xD2=p4[0]-p3[0];
yD1=p2[1]-p1[1];
yD2=p4[1]-p3[1];
xD3=p1[0]-p3[0];
yD3=p1[1]-p3[1];

xP=-yD1;
yP=xD1;
denom=xD2*(-yD1)+yD2*xD1;
if (denom==0) {
return NULL;
}
else{
h=(xD3*(-yD1)+yD3*xD1)/denom;
}
std::cout<<"h is"<<h<<endl;
if (h < 1) std::cout<<"no"<<endl;
else std::cout<<"yes"<<endl;
if (h==1) {
return NULL;
}
else{
if ((h>0)&&(h<1)){
pt[0]=p3[0]+xD2*h;
pt[1]=p3[1]+yD2*h;
pt[2]=0.00;
}
else{
return NULL;
}
}


return pt;


编辑:

好的,所以很清楚我应该如何重新表述条件。

来自:

double h;
if (h==1){
//computations here
}

收件人:

double h;
if (abs(h-1)<tolerance){
//computations here
}

当我使用双数时。

但是我该如何重新表述呢?

double h;
if (h<1){
//computations here
}

最佳答案

由于 h 是 double ,它可能已经足够接近 1 以打印为 1,但实际上它比 1 小一点,因此比较成功。 Floating-point numbers经常这样做。

关于c++ - 浮点比较的奇怪结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/713763/

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