MJJ论坛

 找回密码
 注册
查看: 538|回复: 10

技术讨论:关于python中float运算的精度问题

[复制链接]
发表于 2024-5-24 15:44:15 | 显示全部楼层 |阅读模式
各位大佬,有个问题想问问大家有没有建议

python中float运算经常会出现精度丢失问题。例如python中输入 0.10+0.20 ,计算结果 0.300000000000004


假如用decimal计算,可以解决这个问题。但是问题在于decimal计算几乎比float计算慢了10倍以上,太慢了,不采用。

我知道可以用round四舍五入,在我的小数位数不确定的情况下,怎么做四舍五入?

比如上图中的
0.3000000000000004 四舍五入成0.3
1.0010000000000001 四舍五入成1.001
发表于 2024-5-24 15:47:51 | 显示全部楼层
没有,慢就慢,毕竟调用的东西变多了



它们什么都知道,它们本就是故意的
我什么也做不了
发表于 2024-5-24 15:56:08 | 显示全部楼层

系统限制 提交不了 代码块
numpy。float32(0.1)
提前做下 numpy 处理就行
发表于 2024-5-24 16:19:12 | 显示全部楼层
试试这个

import math

math.isclose(0.30000000000000004, 0.3, rel_tol=1e-9)

或者用matlab中的vpa,允许任意精度计算

syms x
x = vpa('0.1') + vpa('0.2');
disp(x)


发表于 2024-5-24 16:33:26 | 显示全部楼层
我怀疑你是在针对我js,但是我没有证据
0.1 + 0.2 不等于0.3
发表于 2024-5-24 16:42:24 来自手机 | 显示全部楼层
浮点数不妈是 CPU硬件特性决定的吗。IEEE 754,另外大数数据类型在现有编程语言中不管哪个都是基于算法实现的,不是硬件加速。
发表于 2024-5-24 16:46:58 | 显示全部楼层
慢就慢点, 想快就换语言
通用处理方法是
0.10+0.901
转换成100+901再除以1000
 楼主| 发表于 2024-5-24 16:55:20 | 显示全部楼层
Jonathan9527 发表于 2024-5-24 15:56
系统限制 提交不了 代码块
numpy。float32(0.1)
提前做下 numpy 处理就行

谢谢大佬建议
 楼主| 发表于 2024-5-24 16:57:59 | 显示全部楼层
corporation 发表于 2024-5-24 16:19
试试这个

import math

谢谢大佬,回家试下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|MJJ论坛

Copyright MJJ论坛 © 2022 All Rights Reserved.

快速回复 返回顶部 返回列表