2

我在我编写的一段代码中发现了一个奇怪的行为,当我尝试从程序中重现它时(即使用 MATLAB)不会发生这种行为。

我正在对数组进行如下操作:

a[i] = a[i] / (sqrt(b[i]) * sqrt(c[i]));

其中a和是浮点类型bc数组。的值a和之前bc除法范围从20006000000

运算的结果对于数组的所有元素都是零,但是分别看分子和分母的值,对于给定的元素,运算89509.0 / 90240,375是等于0,991895258

所以,我想知道为什么程序中使用 float 的完整操作不起作用,并且它按预期单独工作。可能是由于数小时的混淆调试?

4

1 回答 1

7

当我遇到类似的情况时,我发现将其分解为多个步骤并查看哪些步骤运行正常而哪些不正常通常会有所帮助。例如,为此,它可以分解为以下内容:

float sqrtb = sqrt(b[i]);
float sqrtc = sqrt(c[i]);
float divisor = srqtb * sqrtc;
float dividend = a[i];
float quotient = dividend / divisor;
a[i] = quotient;

现在我可以遍历每个项目并查看失败的地方(如果失败)。事实是,当我这样做时,我经常在创建步骤时发现问题,然后将其修复。

于 2012-10-09T17:48:28.963 回答