浮点除法和隐式轮次
Float Division and implicit round
本文关键字:除法 更新时间:2023-10-16
我在我编写的一段代码中发现了一种奇怪的行为,当我尝试将其从程序中复制出来(即使用 MATLAB)时不会发生。
我正在对数组进行操作,如下所示:
a[i] = a[i] / (sqrt(b[i]) * sqrt(c[i]));
其中 a
、 b
和 c
是浮点型数组。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;
现在我可以浏览每个项目并查看它失败的地方(如果失败)。事实是,当我这样做时,我经常在创建步骤时发现问题,然后修复它。
相关文章:
- 在除法中不需要四舍五入
- 在TFHE(完全快速同态加密)上执行除法
- 使用 int 表示浮点除法 C++
- 而循环:简单的除法程序输出零,不明白为什么
- 余数除法和不允许除以零 (c++) 时遇到问题
- 如何确定涉及 C++ 中除法的算术表达式的数据类型
- 如何使用除法和for_each?
- C++:奇怪的除法输出
- 分配给浮点数的积分文字除法 - 为什么结果是错误的?
- 除法函数返回错误的值
- 检查向量是否使用除法和阻抗算法进行排序
- 不使用算术运算符的除法
- C++编译器能在编译时计算出文字的除法结果吗
- 浮点 由于除法语句而导致的 c++ 异常
- 特征矩阵向量除法
- 在早期的 C 和 C++ 编译器中,手动位移位与乘法和除法的相关性如何?
- 用除法反转向量的元素
- 按运行时常量值重复整数除法
- 将 int 128 除法提升为浮点数
- 用于 3D 矢量的高效除法运算符