我的C API有一个函数,它将double作为输入.只有3或4个值是有效输入,所有其他值都是无效输入和拒绝.
我想检查是否可以准确表示所有有效输入值,以便我可以避免epsilon检查以提高可读性.
是否有一个工具(最好在命令行上)可以告诉我十进制值是否具有精确的二进制表示作为浮点值?
解决方法
这是一个完全符合您要求的
Python片段;它需要
Python 2.7或Python 3.x. (早期版本的Python对浮点转换不太仔细.)
import decimal,sys input = sys.argv[1] if decimal.Decimal(input) == float(input): print("Exactly representable") else: print("Not exactly representable")
用法:在名称’exact_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