c++ - 浮点除法和隐式轮

标签 c++ casting floating-point

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

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

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

其中 abc 是 float 类型的数组。 abc先除法的取值范围从20006000000

运算结果对数组的所有元素都为零,但是分别看分子和分母的值,对于给定的元素,运算结果为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/

相关文章:

c# - 我应该覆盖字符串转换还是 ToString 方法?

c++ - 编译器是否避免中间整数提升或转换?

c - 可移植一致浮标

c++ - 如果编译器不支持,将可变参数传递给 lambda 表达式的解决方法

c++ - 静态图添加元素成功但还是空的

c++ - 关于涉及唯一指针的安全操作

Javascript浮点加法解决方法

c++ - 重载数组访问运算符时如何访问 SIMD vector 元素?

arrays - 将对象数组转换为数组数组

c++ - 在 C++ 中设置 double 会给出奇怪的数字