unum如何模拟IEEE的负零?


9

我目前正在阅读John Gustafson(Youtube)的“错误的终结-统一计算” 。我仍然不确定如何用unums 处理在IEEE中由负号零处理的情况。

因此,首先,unum可以表示某些精确值(类似于浮点数),还可以表示在精确值(包括精确的-∞和∞)之间的开放区间。因此,完整的实线由交替的精确值和开放时间间隔表示:

-∞,(-∞,-maxreal),-maxreal,... -smallsubnormal,(-smallsubnormal,0),

0,

(0,smallsubnormal),smallsubnormal,... maxreal,(maxreal,∞),∞

以这种方式(在IEEE传统中)异常值(例如下溢和上溢)只是一些开放时间间隔。换句话说:这些以前特殊的条件现在变成常规情况。

IEEE的-∞对应于{-∞}和(-∞,-maxreal)的并集。

现在,有符号零可能是时间间隔(-smallsubnormal,0)和(0,smallsubnormal)。

但是,1 /(-smallsubnormal,0)现在是(-∞,-maxreal),而不仅仅是-∞。而1/​​0是∞。

我仍然犹豫的是在IEEE -0和+0比较中相等。但他们不是没有共同点。似乎映射不是100%。因此,我想知道是否存在可能出现差异的极端情况((以及这些情况是否确实相关))。

(我知道为什么负零很重要?用于负浮点值


1
您为什么认为映射需要一对一?您链接的问题中陈述的原因是没有问题的,那么为什么要设为负零?
Ordous 2015年

@Ordous:因为(第18.1章,第257页)“数字是浮点数的超集。浮点数只是uum为零的unums,等等。” 所有这些(包括guess)都表明一个人可以或多或少地(并且从一开始)就可以从字面上翻译事物。我完全意识到直译不能充分利用unums。

5
没有手头的书就很难反驳报价。但是,他在IEEE演示文稿中的幻灯片指出了unum计算的优势:“无需下溢”。因此:不需要负零,因为它正好是下溢。也许您可以扩展此系统以使其包含负零,但没有理由这样做。老实说,IEEE的负0与数学不一致。
2015年

@Ordous:下溢由打开时间间隔(-smallsubnormal,0)及其正值对应。因此,这些是最接近-0和+0的东西。但是这个间隔真的可以像吗?
2015年

8
下溢在这里不是“处理”的,只是不存在。负0是IEEE中的一个问题,该标准正在尝试将其与其他问题一起修复。您不能也不应等于-0和+0,但是由于在IEEE中它们的差为0,因此它们必须相等。这个悖论没有好的解决方案。在unums中,它们确实存在差异,因此它们不能相等。该系统的全部目的是解决IEEE中的问题,但这意味着它一定与它不一致。这是上述不一致之处之一。以及之所以有建议的内置系统来使用他的书中的旧标准的原因。
2015年

Answers:


3

评论太久,因此将其写为答案...

IEEE的问题在于,我们需要区分三种情况,但只有两种表示形式:

  • 负值,绝对值太小而无法表示–由IEEE -0.0表示,可能很容易映射到 (-smallsubnormal,0)
  • 值完全为null,由IEEE 0.0表示,映射到 0
  • 正值太小而无法代表;这个也具有IEEE表示0.0 但应该映射到(0, +smallsubnormal)

现在的问题不是负零,而是我们无法区分IEEE 0.0是第二种还是第三种情况!换句话说:从UNUM到IEEE的映射函数不是双射的-而且对于任何其他IEEE值也永远不会如此,我们永远都不知道它是精确的还是间隔1!

因此,我认为将-0.0映射到绝对好(-smallsubnormal,0),我们需要确定是否将IEEE 0.0映射到0或者可能更好(0, +smallsubnormal)。我个人倾向于第一个,但这不是很权威。

至于与IEEE的比较(-0.0等于0.0):无论如何(几乎)绝对不应该比较精确的相等性(C或C ++:==运算符),而仅是差的绝对值小于某个适当的阈值。即使使用UNUMS,也只能部分解决此问题,因为我们现在可以比较精确的相等性,如果设置u位,但是设置了u位,我们仍然不知道...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.