4 回答
TA贡献1872条经验 获得超3个赞
浮点数一个普遍的问题就是在计算机的世界中,浮点数并不能准确地表示十进制。并且,即便是最简单的数学运算,也会带来不可控制的后果。
因为,在计算机的世界中只认识0与1。而0.1 的二进制表示为 0.000110011[0011]...,因为是无限循环的,无法用有限的位表示,所以计算机系统会进行舍入,以求用最接近的值来表示,这里涉及到不同的舍入方式。
再比如,double类型是 64bit 的,最多能表达 2^64 个数,实数有多少呢?无数个,所以 double 类型是装不下所有实数的,只能表达一个近似值。
TA贡献1828条经验 获得超13个赞
python计算要把数字先转为二进制,然后因为小数以二进制形式表示时的有穷性,导致计算误差。就像1/3 = 0.333333333... ; 1/3 + 1/3 + 1/3 =0.33333... + 0.33333.... +0.33333... = 0.9999999.... 。大概这个意思,你自己理解下吧
TA贡献1828条经验 获得超3个赞
我的也一样,不纠结这个。反正使用时指定精度就行了。
帮你试了,必须写成这样才行。二进制表示10进制的小数,10进制里很正常的
十进制整数不会变成二进制小数,但十进制很短的小数的是可能变成二进制很长小数的。
例如0.54转变成二进制是:
0.54=0.10001010001111010111000010100011110101110000101001B
还有一些十进制下一两位小数,在二进制下无限循环小数的,只能取近似值。
添加回答
举报