在此API(https://docs.gemini.com/rest-api/#current-order-book)中,它表示:
返回的数量和价格以字符串而不是字符串形式返回 数字。返回的数字是准确的,不是四舍五入的,它可以是 将它们视为浮点数很危险。
为什么将数字字符串视为浮点数是“危险的”?仅仅是准确性的损失吗?如果损失精度,从技术上讲,首先返回浮标更“危险”。这句话似乎暗示着解析浮点数的行为可能是“危险的”。为什么会这样呢?
答案 0 :(得分:1)
将数字字符串解析为浮点数有什么风险?
将无限映射为无限
常见的浮点类型具有有限的成员集/大小。假设float
占用了32位。这导致大约2 32 个不同的float
值。 字符串具有无限的组合。无论目标float
是使用二进制,十进制还是stone knives and bears skins 1:40进行编码,都必须付出一些努力。
风险:假设所有值都是可编码的。
十进制转换为二进制
典型的floats使用 binary 表示法/分数,而 string 通常使用十进制数字书写。
"1.234"
没有与float
等效的精确值。相反,解析会产生附近的float
。 float
本身是 exact ,但与1.234的 exact 值不同。
风险:假设转化次数完全相同。
范围
即使可以容忍不精确,float
的范围也可能是+/- 10 38 ,+ /-10 308 等。 10000!并非专家代表。
在将其转换为0.0之前,值也只能变得如此之小。
风险:上溢/下溢。
真正的危险缺乏对浮点在各种情况下与 real 数学如何不同以及如何应对的理解。有了这些,细微之处就可能导致无限循环,金钱损失,代码崩溃或跨平台不一致。
在数学中有real number_line。使用float
,该行被“点缀”。 Zoomed in example example 2