matlab - 准确表示整数的 double 除法(当它们可整除时)

标签 matlab division ieee-754 integer-division double-precision

鉴于8-byte doubles can represent all 4-byte ints precisely ,我想知道将存储 int 的 double A 除以存储 int 的 double B(这样整数 B 除 A)是否总是会给出与作为它们的商的整数对应的精确 double?所以,如果 B 和 C 是整数,并且 B*C 适合 32 位 int,那么是否可以保证

int B,C = whatever s.t. B*C does not overflow 32-bit int
double(B*C)/double(C) == double((B*C)/C) ?

IEEE754 标准是否保证这一点?

在我的测试中,它似乎适用于我尝试过的所有示例。在 Python 中:

>>> (321312321.0*3434343.0)/321312321.0 == 3434343.0
True

问的原因是 Matlab 很难处理整数,所以我经常只使用默认的 double 进行整数计算。当我知道整数是完全可分的,并且如果我知道当前问题的答案是肯定的,那么我就可以避免对整数进行强制转换,idivide(..) 等,这可读性较差。

最佳答案

Luis Mendo 的评论确实回答了这个问题,但为了专门解决在 Matlab 中的使用,有一些方便的实用程序 described here .您可以使用 eps(numberOfInterest) 查找到下一个最大 double float 的距离。例如:

eps(1) = 2^(-52)
eps(2^52) = 1

这实际上保证了以 double 形式保存的整数的数学运算将是精确的,前提是它们不会溢出 2^52,这比 32 位 int 类型中保存的内容大很多。

关于matlab - 准确表示整数的 double 除法(当它们可整除时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23193114/

相关文章:

octave - GNU Octave 矩阵除法是如何工作的?出现意想不到的行为。

c - 融合乘加和默认舍入模式

floating-point - 逆向工程专有 float 编码

matlab - 如何在 MATLAB 中将自定义颜色范围与颜色条组合?

matlab - 在 MATLAB 中将 varargin 传递给嵌套类方法

python - Numpy Array Division - 不支持的操作数类型/: 'list' and 'float'

floating-point - 二进制浮点加法算法

c++ - 如何在多线程 MEX 函数中打印到控制台?

arrays - 从数组中生成坐标

assembly - MIPS 中的除法伪指令