gpt4 book ai didi

C 程序似乎跳过 while 循环

转载 作者:太空宇宙 更新时间:2023-11-03 23:32:50 25 4
gpt4 key购买 nike

代码似乎跳过了 while 循环:

int i,j;
i= floor((Lx-23.61)/0.1);
j=0;
while(Nh - modSED[i][j] > 0.0){
j++;
}
if(j>0 && modSED[i][j]-Nh > Nh-modSED[i][j-1]){
fileNH=modSED[i][j-1];
}else{
fileNH=modSED[i][j];
}

它或多或少是对 double 组的粗略线性搜索(i-index 由代码的另一部分预设,应该不是问题)。当我查看 GDB 时,代码似乎有问题:

Breakpoint 1, mag (filter=4, Lx=23.930108812418158, z=0.57071772467724535, Nh=0.011911981460606383) at infopt.c:45
45 while(Nh-modSED[i][j]>0.0){
(gdb) print Nh-modSED[i][j]
$1 = 0.001911981460606383
(gdb) n
48 if(j>0 && modSED[i][j]-Nh > Nh-modSED[i][j-1]){
(gdb)

它刚刚跳过了 j++ 段,即使 while 循环的计算结果应该为真。

谢谢,乔希

最佳答案

似乎是由于 float 比较而出现的错误。众所周知,浮点比较不是很安全。有关详细信息,请参阅以下内容:

第二个链接对浮点运算有很详细的解释

关于C 程序似乎跳过 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11624355/

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