作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在我编写的一段代码中发现了一个奇怪的行为,当我尝试从程序中重现它时(即使用 MATLAB)并没有发生这种行为。
我正在对数组进行如下操作:
a[i] = a[i] / (sqrt(b[i]) * sqrt(c[i]));
其中 a
、b
和 c
是 float 类型的数组。 a
、b
和c
先除法的取值范围从2000
到6000000
运算结果对数组的所有元素都为零,但是分别看分子和分母的值,对于给定的元素,运算结果为89509.0/90240,375
等于 0,991895258
。
所以,我想知道为什么在程序中使用 float 的完整操作不起作用,并且它按预期单独工作。可能是由于数小时的混淆调试?
最佳答案
当我遇到类似情况时,我发现将其分解为多个步骤并查看哪些步骤行为正确,哪些步骤行为不正确通常会有所帮助。例如,为此,它可以分解为以下内容:
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;
现在我可以遍历每个项目并查看失败的地方(如果失败)。事实上,当我这样做时,我经常在创建步骤时发现问题,然后解决问题。
关于c++ - 浮点除法和隐式轮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12805380/
我是一名优秀的程序员,十分优秀!