double 精度 急!!!

来源:百度知道 编辑:UC知道 时间:2024/06/07 20:23:29
double m
m=15220939988140032*2+41584381386555392*2
结果 m=113610642749390850.0000
为什么会计算错误??
正确的应该是113610642749390848

113610642749390850
113610642749390848
long double 也不行

还有 double 最大应该是pow(2,63)-1 吧
还没超出

更重要的是:
用 __int64 就是对的 而double 却错了

为什么 谢谢 有加分的

double的有效数字位数问题。。。超出的四舍五入
C++中值要求最少10位,上限按编译器不同可能有区别
double是 把内存划分为
有效数字
多少次方
俩段存储
所以他的存储范围大
但是有精度限制
int_64是精度高,但存储范围小

即使是双精度在有效数字过长的情况下,也不能达到绝对的精确,这是寄存器中数字储存形式决定的,您可以使用long double来定义和计算

14