一尘不染

有没有工具可以知道某个值是否具有精确的二进制表示形式作为浮点变量?

linux

我的C API具有一个将a作为输入的函数double。只有3或4个值是有效输入,所有其他值都是无效输入并被拒绝。

我想检查一下我所有的有效输入值是否都能正确表示,以便避免使用epsilon检查以简化可读性。

是否有工具(最好在命令行上)可以告诉我十进制值是否具有精确的二进制表示形式作为浮点值?


阅读 216

收藏
2020-06-02

共1个答案

一尘不染

这是一个符合您要求的Python代码段;它需要Python 2.7或Python3.x。(Python的早期版本不太重视浮点转换。)

import decimal, sys
input = sys.argv[1]
if decimal.Decimal(input) == float(input):
    print("Exactly representable")
else:
    print("Not exactly representable")

用法:将脚本保存为“ exactly_representable.py”名称后,

mdickinson$ python exactly_representable.py 1.25
Exactly representable
mdickinson$ python exactly_representable.py 0.1
Not exactly representable
mdickinson$ python exactly_representable.py 1e22
Exactly representable
mdickinson$ python exactly_representable.py 1e23
Not exactly representable
2020-06-02