1
king1101 2019-04-10 16:01:01 +08:00
这些错误是由底层 CPU 和 IEEE 754 标准通过自己的浮点单位去执行算术时的特征。由于 Python 的浮点数据类型使用底层表示存储数据,因此你没办法去避免这样的误差。如果想要精确一点的话,可以使用 decimal 模块。(摘自 Python Cookbook )
|
2
xiaoheijw 2019-04-10 16:01:41 +08:00
python 默认的是 17 位小数的精度,前 16 位是准确的,第 17 位开始不准确
|
3
shuax 2019-04-10 16:04:28 +08:00
基础不牢固啊
|
4
shintendo 2019-04-10 16:13:44 +08:00
这不是 python 的 bug,而是几乎所有主流编程语言(使用 IEEE 754 格式存储浮点数)都有的问题
其本质原因是,在十进制里能精确表示的小数,用二进制不一定能精确表示 |
5
justou 2019-04-10 16:19:49 +08:00
每隔一段时间 python 都要出一个这种 bug
这是好事, 说明玩蛇的队伍一直都在壮大 |
6
wly19960911 2019-04-10 16:25:47 +08:00
https://www.guokr.com/article/27173/ 看这篇就好了。主要是真实值展示和二进制存储存储的差异问题。
|
7
hmzt 2019-04-10 18:15:57 +08:00 1
看来 c 语言作为入门语言还是很必要的,hh
|
8
shawndev 2019-04-10 18:17:14 +08:00
这是浮点数的 bug,如果嫌计算不准确,听说可以试一试 fortran
|
9
jhsea3do 2019-04-10 18:29:10 +08:00
nodejs 下有一款 big.js 很好用
python 下用 numpy 可以 import numpy as np np.multiply(4.8, 1.2) |
10
vcgo 2019-04-10 18:29:44 +08:00
浮点数运算丢失精度,不只是 Python,很多编程语言都是这样。
|
12
whoami9894 2019-04-10 18:48:05 +08:00 via Android
是的,这是解释器的 bug,楼主快去社区反馈
|
13
mmdsun 2019-04-10 18:54:37 +08:00 via Android
快去恶补基础。不止是 py 不少语言都丢精度。
高精度运算比如价格:可以库里存分。用 long 或者整数小数分开处理。 java 可以用大数类运算。 |
14
tcitry 2019-04-10 20:03:37 +08:00
看看小数点后的二进制表示法?
|
15
nikolai 2019-04-10 20:09:07 +08:00
|
16
fan2006 2019-04-11 06:43:36 +08:00
from decimal import Decimal
print(Decimal('4.8')*12) |
17
Qzier 2019-04-12 13:46:12 +08:00 via iPhone
与编程语言无关,与计算机浮点数的表示有关。
|