关于以双精度存储的整数相乘的精度
On precision in multiplying integers stored as doubles
我有这样的代码:
double x = ...;
double y = ...;
double z = x * y;
假设 x 和 y 被分配给整数(例如,double x = 6,double y = 5),并且 x * y 适合 48 位。我能保证 z
不会失去精度吗?换句话说,z - floor(z) == 0.0
?
假设编译器使用 IEEE-754 标准,double 使用 64 位。
是的,保证不会丢失精度。浮点数的基本规则是,结果被精确计算,然后尽可能接近地存储。由于所有 2^53 以内的整数都可以精确表示,因此 z
将是精确的。
我有这样的代码:
double x = ...;
double y = ...;
double z = x * y;
假设 x 和 y 被分配给整数(例如,double x = 6,double y = 5),并且 x * y 适合 48 位。我能保证 z
不会失去精度吗?换句话说,z - floor(z) == 0.0
?
假设编译器使用 IEEE-754 标准,double 使用 64 位。
是的,保证不会丢失精度。浮点数的基本规则是,结果被精确计算,然后尽可能接近地存储。由于所有 2^53 以内的整数都可以精确表示,因此 z
将是精确的。