将IEEE 754浮点数转换为MIL-STD-1750A浮点数

4
我正在尝试将IEEE 754 32位单精度浮点值(标准C浮点变量)转换为MIL-STD-1750A格式的无符号长整型变量。我在帖子底部包含了IEEE 754和MIL-STD-1750A的规范。目前,我在代码中遇到了将指数转换的问题。我还看到将尾数转换的问题,但我还没有解决这些问题。我使用上面链接中表3中列出的示例来确认我的程序是否正确转换。其中一些示例对我来说没有意义。
  1. How can these two examples have the same exponent?

    .5 x 2^0 (0100 0000 0000 0000 0000 0000 0000 0000) 
    -1 x 2^0 (1000 0000 0000 0000 0000 0000 0000 0000)
    

    .5 x 2^0 has one decimal place, and -1 has no decimal places, so the value for .5 x 2^0 should be

    .5 x 2^0 (0100 0000 0000 0000 0000 0000 0000 0010)
    

    right? (0010 instead of 0001, because 1750A uses plus 1 bias)

  2. How can the last example use all 32 bits and the first bit be 1, indicating a negative value?

    0.7500001x2^4 (1001 1111 1111 1111 1111 1111 0000 0100)
    
  3. I can see that a value with a 127 exponent should be 7F (0111 1111) but what about a value with a negative 127 exponent? Would it be 81 (1000 0001)? If so, is it because that is the two's complement +1 of 127?

谢谢

1750ASpecification


1
我建议首先阅读 CPAN 上的 Convert::MIL1750A 模块 - unwind
2个回答

1

1) 这两个例子如何拥有相同的指数?

据我理解,符号和尾数实际上定义了一个范围在[-1.0, 1.0)的2的补码值。

当然,这会导致冗余表示(0.125*2 1 = 0.25*2 0等)。因此,通过禁止尾数值在[-0.5, 0.5)范围内来选择规范化的标准化表示。

因此,在您的两个示例中,-1.0和0.5都落在“允许”的尾数范围内,因此它们共享相同的指数值。

2) 最后一个例子如何使用所有32位并且第一位为1,表示负值?

我觉得那看起来不正确;你是怎么得出这个表示的?

3) 如果指数为负127,那么值是多少(1000 0001)?

我认为是这样的。


  1. 好的。这是你自己的知识还是有来源,我可以阅读更多以获得更好的理解?
  2. 我获取了与第一个问题相同的表示。从表格中取出十六进制值并将其转换为二进制。
- halexh
1
@halexh:(1)我刚刚阅读了你提供的规范!但是其他浮点表示法(例如IBM 360)也存在冗余表示的类似问题,因此我对这个概念很熟悉。 - Oliver Charlesworth
1
@halexh:关于(2);我认为您错过了那个例子中包含“-”符号的情况! - Oliver Charlesworth
哈哈,你说得完全正确,我甚至没有看到那个负号。谢谢! - halexh
我并没有真正理解这个归一化表示概念。如果在允许的范围[-1.0,1.0)内,符号+尾数值在[-0.5,0.5)范围内,那么我不明白为什么这些值会被禁止。当你说这些值被禁止时,你到底是什么意思? - halexh
@halexh: “disallowed” 的意思是它们不能形成规范化的表示。因此,0.32^0 不是规范化的,但 0.62^-1 是规范化的。 - Oliver Charlesworth

0
  1. 记住分数是“有符号的分数”。有符号值以2的补码格式存储。因此,将零视为一。
    因此,该数字可以写成-0.111111111111111111111(基数2)x 2^0,接近于1(如果我的数学正确,则收敛于1.0)

  2. 在最后一个示例中,原始文档中有一个负号(-0.7500001x2^4)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接