繁体   English   中英

十进制模块不能在二进制级别上工作? 如何?

[英]Decimal-module is not working on binary level? How?

当我启动程序时,我是一个初学者,当涉及到后台发生的事情时。 现在我的重点是“Python”中“decimal”和“float”之间的区别。 我阅读了以下文章:

Python中的十进制与浮点数

是的,我现在知道“十进制”的作用以及如何使用此模块。 但是,我在下面这句话之后问了“十进制”是如何工作的:

“与浮点数不同,decimal 模块中定义的十进制对象不容易出现这种精度损失,因为它们不依赖于二进制分数。”

据我所知,计算机只能使用二进制数字系统。 所以我的问题是:当“十进制”模块不在二进制级别处理时,计算机如何处理和使用它?

在这种情况下,“二进制分数” - 是一种在内存中存储浮点值的方法。 或者更准确地说,将任何基数的浮点数表示为二进制。 是的,一切都存储为二进制文件,计算机确实在低级别操作二进制文件。 然而,在高层次上,我们很少专门使用二进制。 我们使用字符串、整数、浮点数等——它们只是一种方便的抽象,使人类更容易使用它。

所以回到你的问题:

Python 的float确实将其值存储为二进制表示。 这正是它可能产生精密伪像的原因。

另一方面,十进制不作为一个整体来操作浮点数。 它将数字的所有部分分开保存,然后单独操作。 并且不要忘记, Decimal - 是一个类,而不是原子类型。

以下是来自 Decimal 来源的片段:

    if intpart is not None:
        # finite number
        fracpart = m.group('frac') or ''
        exp = int(m.group('exp') or '0')
        self._int = str(int(intpart+fracpart))
        self._exp = exp - len(fracpart)
        self._is_special = False

如您所见,它检索整数、指数和其他实用程序数据并单独存储它们。

Decimal 的精度是以计算和内存资源为代价实现的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM