鉴于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/