4

PL/I 中的代码片段如下:

DECLARE WAVE_LTH FLOAT BINARY(21);

...

WAVE_LTH = 11001E-10B (**resultant value = 0.0244140**)

任何人都可以澄清结果值是如何得出的吗?

4

1 回答 1

9

有问题的程序语句可能来自在 IBM System/360 硬件上运行的 PL/I 程序。这使用了十六进制浮点表示,有关详细信息,请参阅此Wikipedia 文章

根据我关于 PL/I 的旧文献,FLOAT BINARY(21)在这个平台上指定了一个单精度浮点数。21指定有效尾数位数。由于这对应于FLOAT BINARY操作数的默认值,因此可以不使用它。由于 base-16 表示,24 位尾数的最高有效三位可能为零;这保证了 21 位的精度。

后缀告诉我们B浮点字面量使用 base-2 表示。11001二进制是十进制的 25。指数本身以十进制给出,因此E-10表示比例因子为 2 -10。因此,这个浮点文字常量的值是 25 / 1024 或 0.0244140。

于 2015-09-02T16:49:30.797 回答