Floating point 有人能澄清结果值是如何推导出来的吗?

Floating point 有人能澄清结果值是如何推导出来的吗?,floating-point,mainframe,pl-i,Floating Point,Mainframe,Pl I,PL/I中的代码片段如下所示: DECLARE WAVE_LTH FLOAT BINARY(21); ... WAVE_LTH = 11001E-10B (**resultant value = 0.0244140**) 有人能澄清结果值是如何推导出来的吗?所讨论的程序语句可能来自运行在IBM System/360硬件上的PL/I程序。这使用了十六进制浮点表示,有关详细信息,请参见此 根据我以前关于PL/I的文献,FLOAT BINARY(21)在这个平台上指定了一个单精度浮点数21指定尾

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

DECLARE WAVE_LTH FLOAT BINARY(21);

...

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

有人能澄清结果值是如何推导出来的吗?

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

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


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

我不熟悉这个符号(这是PL/1吗?),但它的值似乎是25*2**(-10)=24/1024=0.02441406。11001在二进制中是25在十进制中,指数在十进制中给出,所以-10。尾随的“B”可能告诉我们基数是二进制的。看起来像PL1(或一个导数),我认为njuffa分析是正确的。浮点二进制(21)声明一个21位精度的二进制浮点数。在这种情况下,他们使用的是base-2assignment@njufa:我想你应该把这个作为答案贴出来。回答得好。我曾考虑投票以打字错误的方式结束(请为我阅读手册),但当我检查时,手册中的内容并不清楚:-)PL/1=PL/I。几年前对我来说是新闻,但事实证明是真的。如果今天有人担心,它现在运行在z/architecture系统上,至少30年来没有人使用360。这是最新的大型机发布,Enterprise PL/I 4.2将运行的位置是@BillWoodger感谢您指出它应该是“PL/I”,而不是“PL/1”,我将在我的回答中解决这个问题。事实上,我从未使用过PL/I(而且在很久以前,仅在几个月内使用过与IBM system/360兼容的机器),但我确实从书本上了解到了一些情况