我的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。但是,我还没有找到任何可以做到这一点的工具。 在某个地方有这样的工具吗?