Кто-нибудь может уточнить, как получается результирующее значение?

Фрагмент кода в 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.

Другие вопросы по тегам