全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 501|回复: 10
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 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
2#
发表于 2024-5-24 15:47:51 | 只看该作者
没有,慢就慢,毕竟调用的东西变多了



它们什么都知道,它们本就是故意的
我什么也做不了
4#
发表于 2024-5-24 15:56:08 | 只看该作者

系统限制 提交不了 代码块
numpy。float32(0.1)
提前做下 numpy 处理就行
5#
发表于 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)


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

谢谢大佬建议
10#
 楼主| 发表于 2024-5-24 16:57:59 | 只看该作者
corporation 发表于 2024-5-24 16:19
试试这个

import math

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

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-6-21 21:22 , Processed in 0.065606 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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