Python和/或C/C++中的高精度算术?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python和/或C/C++中的高精度算术?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1709字,纯文字阅读大概需要3分钟。
内容图文
![Python和/或C/C++中的高精度算术?](/upload/InfoBanner/zyjiaocheng/698/f95bb126e6534729a03acce26ce2fe63.jpg)
摘要:哪种Python包或C-Library是高精度算术运算的最佳选择?
我有一些函数可以将小数天(0.0-0.99999 ..)转换为人类可读的格式(小时,分钟,秒;但更重要的是:毫秒,微秒,纳秒).
转换由以下功能完成:
(请注意,我还没有实施时区修正)
d = lambda x: decimal.Decimal(str(x))
cdef object fractional2hms(double fractional, double timezone):
cdef object total, hms, ms_mult
cdef int i
hms = [0,0,0,0,0,0]
ms_mult = (d(3600000000000), d(60000000000), d(1000000000), d(1000000), d(1000), d(1))
# hms = [0,0,0,0,0]
total = d(fractional) * d(86400000000000)
for i in range(len(ms_mult)):
hms[i] = (total - (total % ms_mult[i])) / ms_mult[i]
total = d(total % ms_mult[i])
return ([int(x) for x in hms])
分数:
def to_fractional(self):
output = (self.hour / d(24.0)) + (self.minute / d(1440.0))
output += (self.second / d(86400.0)) + (self.millisecond / d(86400000.0))
output += self.microsecond / d(86400000000.0)
output += self.nanosecond * (d(8.64) * d(10)**d(-9))
return output
然而,我来回转换的结果不准确:
jdatetime.DayTime.fromfractional(d(0.567784356873)).to_fractional()
Decimal('0.56779150214342592592592592592592592592592592592592592592592592592592592592592592592592592592592592592592592592592')
# Difference in-out: Decimal('0.000007145270')
当我更改d()以返回常规Python float时:
# Difference in-out: 7.1452704258900823e-06 (same)
因此,我的问题是:哪个Python包或C库能够更准确地执行此操作?
解决方法:
差异是由于您的代码中存在错误,而不是由于任何准确性问题.这条线
output += self.nanosecond * (d(8.64) * d(10)**d(-9))
应该是这样的
output += self.nanosecond / d(86400000000000)
此外,在代码中使用浮点文字并将它们转换为Decimal是一个坏主意.这将首先将文字数字舍入为浮点精度.后来转换为Decimal无法恢复丢失的准确性.尝试
d = decimal.Decimal
并仅使用整数文字(只需删除.0部分).
内容总结
以上是互联网集市为您收集整理的Python和/或C/C++中的高精度算术?全部内容,希望文章能够帮你解决Python和/或C/C++中的高精度算术?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。