Floating point 关于存储为双精度整数的乘法精度

Floating point 关于存储为双精度整数的乘法精度,floating-point,precision,ieee-754,Floating Point,Precision,Ieee 754,我有这样的代码: double x = ...; double y = ...; double z = x * y; 假设x和y被分配给整数,比如,双x=6,双y=5,x*y适合48位。我能保证z不会失去精度吗?换句话说,z-floorz==0.0 假设编译器使用IEEE-754标准,double使用64位。是的,保证不会丢失精度。浮点运算的基本规则是,精确地计算结果,然后尽可能紧密地存储。由于2^53之前的所有整数都是可精确表示的,因此z将是精确的。>浮点运算的基本规则是,结果将精确计算。哇

我有这样的代码:

double x = ...;
double y = ...;
double z = x * y;
假设x和y被分配给整数,比如,双x=6,双y=5,x*y适合48位。我能保证z不会失去精度吗?换句话说,z-floorz==0.0


假设编译器使用IEEE-754标准,double使用64位。

是的,保证不会丢失精度。浮点运算的基本规则是,精确地计算结果,然后尽可能紧密地存储。由于2^53之前的所有整数都是可精确表示的,因此z将是精确的。

>浮点运算的基本规则是,结果将精确计算。哇,真有趣。任何手术都是这样吗?除法、乘法、加法、pow等?@Evgenii.Balai:加法、减法、乘法和除法的基本运算都是如此。对于pow、sin、log等库例程,IEEE 754-2008标准建议应该是正确的,但据我所知,没有人以已知的绑定运行时间实现所有这些例程。实施的质量因供应商而异。通常,它们返回的结果误差很小。