内置“float”上的额外函数类似于“decimal”上的函数。
floatextras的Python项目详细描述
#浮雕 内置float上的额外函数类似于decimal上的函数。
API
>>> from floatextras import * >>> f = -123.456 >>> as_tuple(f) FloatTuple(sign=1, digits=(1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1), exponent=6) >>> sign, digits, exponent = as_tuple(f) >>> from_tuple((0, digits, exponent+1)) 246.912 >>> next_minus(f) -123.45600000000002 >>> next_plus(f) -123.45599999999999 >>> next_toward(f, 0) -123.45599999999999 >>> float_difference(1, next_minus(next_minus(1))) 2 >>> qnan2 = make_nan(2) >>> isnan(qnan2) True >>> isqnan(qnan2) True >>> issnan(qnan2) False >>> nan_payload(qnan2) 2 >>> isqnan(float('nan')) True >>> nan_payload(float('nan')) 0
函数为元组,下一个,下一个,以及下一个 具有与相应方法相同的效果 [decimal][1]对象,但对于内置的值[float][2] 类型,并且from-tuple等同于decimal构造函数from 一个元组。
[1]: https://docs.python.org/3/library/decimal.html [2]: https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex
函数是一个逆函数,它告诉我们 你需要打多少次电话到g上的next\u plus才能得到f。
nan函数是构造和检查nan的实用函数 具有特定有效载荷的值。
大多数函数的可选direct参数可用于强制 要使用[cTypes][3]重新解释的模块 值,而不是使用 [结构][4]模块。在几乎所有的平台上,这将给 同样的结果;在不使用[ieee float][5]的平台上, 或者以不同于主字节顺序的字节顺序存储它们, 相反,这将给出错误的结果(但这可能是有用的 在实验时检查)。
[3]: https://docs.python.org/3/library/ctypes.html [4]: https://docs.python.org/3/library/struct.html [5]: http://en.wikipedia.org/wiki/IEEE_floating_point
与十进制数的差异
固定大小的二进制浮点数当然与 任意大小的十进制浮点数。这意味着元组表示是 明显不同。特别是:
十进制存储为一个整数加上一个指数 无穷大、安静NaN和信号NaN的特殊指数(f, 分别为n和n)。
float存储为1到2之间的分数,前导为1 隐式,加上一个指数,带有 无穷大和两个NaN(1024,如果所有数字都是0,则为无穷大, 否则nan,如果第一个数字是1),则安静,另一个数字是0 和非规范值(-1023,它被视为-1022,但没有 分数上的隐式前导1)。
这些差异比实验更容易看出 解释(这部分是这个模块存在的原因)。
动机
python的decimal类型表示ieee 854-1987十进制浮点数,并且 它提供了许多方便的操作来探索 这种代表性,比如[next_plus][6]家族和 [作为元组][6]。有时这些操作比 探索——例如,测试一个算法的结果是否在 预期结果的1ulp。
[6]: https://docs.python.org/3/library/decimal.html#decimal.Decimal.next_plus [7]: https://docs.python.org/3/library/decimal.html#decimal.Decimal.as_tuple
然而,内置的float类型几乎总是表示 一个ieee 754-1985二进制浮点数,对于它,相同的操作是 方便,不包括在内。
当然,可以将浮点和运算符的位 如[ieee floats和python][8]中所述,它们是手动的,而不是 几乎同样方便。
[8]: http://stupidpythonideas.blogspot.com/2015/01/ieee-floats-and-python.html
因此,该模块为float提供类似的功能。