Кто-нибудь может уточнить, как получается результирующее значение?
Фрагмент кода в PL/I приведен ниже:
DECLARE WAVE_LTH FLOAT BINARY(21);
...
WAVE_LTH = 11001E-10B (**resultant value = 0.0244140**)
Кто-нибудь может уточнить, как получается результирующее значение?
1 ответ
Заявление о программе предположительно взято из программы PL/I, работающей на оборудовании IBM System / 360. При этом использовалось шестнадцатеричное представление с плавающей точкой, подробности см. В этой статье Википедии.
Согласно моей старой литературе по 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.