当前位置: 首页 > 面试题库 >

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

长孙谦
2023-03-14
问题内容

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

我想检查一下我所有的有效输入值是否都能正确表示,以便避免使用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


 类似资料:
  • 类有一些有用的方法来保证无损转换: <代码>字节值精确() 但是,方法floatValueExact()和doubleValueExact()不存在。 我阅读了方法和的OpenJDK源代码。两者似乎都分别回退到和,它们可能返回正无穷大或负无穷大。例如,解析10,000个9s的字符串将返回正无穷大。据我所知,没有无穷大的内部概念。此外,将100个9s的字符串解析为给出了,这不是无穷大,而是失去了精度

  • 问题内容: 以下值给我错误的精度。仅使用特定数字可以观察到它。这可能是一个浮动表示问题,但想知道具体原因。 正在打印的输出代替。 问题答案: 如果希望十进制数字与在Java中输入的数字完全一样,请使用BigDecimal而不是float。 浮点数对于十进制而言本质上是不准确的,因为许多以十进制结尾的数字(例如0.1)都是以二进制形式重复出现的数字,并且浮点数以二进制表示形式存储。

  • 问题内容: 我有两个数组:一个数组填充了来自ajax请求的信息,另一个数组存储了用户单击的按钮。我使用以下代码(我填写了示例编号): 但是,即使两个数组相同,但名称不同,它总是给出。(我在Chrome的JS控制台中对此进行了检查)。那么,有什么办法可以知道这两个数组是否包含相同的数组?为什么给?我怎么知道第一个数组中的哪个值不在第二个数组中? 问题答案: 请注意,这不会像以前的答案那样修改原始数组

  • 问题内容: python中最小和最大的值是什么? 问题答案: 看到这篇文章。 帖子的相关部分:

  • 问题内容: 变量的每个可能值都可以准确地用变量表示吗? 换句话说,对于所有可能的值,以下操作将成功: 我怀疑没有例外,或者只有例外情况(例如+/-无限或NaN)。 编辑 :问题的原始措词令人困惑(陈述了两种方式,一种回答是“否”,另一种回答是是)。我将其改写为与问题标题匹配的单词。 问题答案: 是。 通过列举所有可能的情况来证明: 在我的机器上在12秒内完成。32位 很小 。

  • 对 YAML 定义的 Azure DevOps 管道进行更改时,将更改推送到分支只是为了看到生成失败并显示分析错误(YAML 有效,但管道定义无效),然后尝试试错解决问题,这可能会非常繁琐。 如果反馈循环可以通过本地分析和验证管道定义来缩短,那就太好了;基本上是一个了解Azure管道中可以定义的各种资源等的linter。但是,我还没有找到任何可以做到这一点的工具。 在某个地方有这样的工具吗?