【发布时间】:2014-04-21 07:43:48
【问题描述】:
鉴于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 很难处理整数,所以我经常只使用默认的双精度数进行整数计算。当我知道整数是完全可整除的,并且如果我知道当前问题的答案是肯定的,那么我可以避免对整数进行强制转换,idivide(..) 等,这样可读性较差。
【问题讨论】:
标签: matlab division ieee-754 integer-division double-precision