PL/I 中的代码片段如下:
DECLARE WAVE_LTH FLOAT BINARY(21);
...
WAVE_LTH = 11001E-10B (**resultant value = 0.0244140**)
任何人都可以澄清结果值是如何得出的吗?
最佳答案
有问题的程序语句可能来自运行在 IBM System/360 硬件上的 PL/I 程序。这使用了十六进制浮点表示,有关详细信息,请参阅此 Wikipedia article .
根据我关于 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。
关于floating-point - 任何人都可以澄清结果值是如何得出的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32345912/