我的C API具有一个将a作为输入的函数double。只有3或4个值是有效输入,所有其他值都是无效输入并被拒绝。
double
我想检查一下我所有的有效输入值是否都能正确表示,以便避免使用epsilon检查以简化可读性。
是否有工具(最好在命令行上)可以告诉我十进制值是否具有精确的二进制表示形式作为浮点值?
这是一个符合您要求的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