Я могу только догадываться об обосновании этого "руководства по кодированию".
В PL / 1 число может быть двоичным (BIN) или десятичным (DE C). Обычно, когда мы думаем о числах, мы думаем о десятичном, а не двоичном. Поэтому мы думаем о числах вроде 123,45 (FIXED DE C (5,2)), а не 1001101.011B (FIXED BIN (10,3)). Фиксированный бинарный код - странная утка, и мы, как правило, не понимаем его интуитивно. Можете ли вы сказать мне, что вышеупомянутое фиксированное двоичное число в десятичном виде? Может быть, целая часть, но как насчет десятичной части?
Давайте разберем это:
1001101.011B
||||||| ||+---> 1/8 .125
||||||| |+----> 1/4 .25
||||||| +-----> 1/2 0.0
||||||+-------> 1 1
|||||+--------> 2 0
||||+---------> 4 4
|||+----------> 8 8
||+-----------> 16 0
|+------------> 32 0
+-------------> 64 64
======
77.375
Вы получили это? Если пойти по другому пути, вы можете преобразовать 123.45 в фиксированный двоичный файл следующим образом:
Integer Fractional
Part Part
123.45 .00000000 .45
-64 |||||||+--> 1/256 = .00390625 -.25
------ ||||||+---> 1/128 = .0078125 ----
59.45 |||||+----> 1/64 = .015625 .2
-32 ||||+-----> 1/32 = .03125 -.125
------ |||+------> 1/16 = .0625 -----
27.45 ||+-------> 1/8 = .125 .075
-16 |+--------> 1/4 = .25 -.0625
------ +---------> 1/2 = .5 ------
11.45 .0125
-8 -.0078125
------ ---------
3.45 .0046875
-2 -.00390625
------ ----------
1.45 .00071825 <--+
-1 |
|
= 1111011B = .01110011B (and it is not exact)
So 123.45 ~ 1111011.01110011B
Так что FIXED BIN, вероятно, не очень хорошая идея. Не каждое фиксированное десятичное число может быть представлено в FIXED BIN, и оно не совсем интуитивно понятно.
Если FIXED / FLOAT не указано, FLOAT используется по умолчанию. Фактически, это то, как хранятся числа с плавающей запятой, которые вы, вероятно, использовали Таким образом, мы можем использовать его для наших обычных вычислений с плавающей запятой.
Что касается вопроса (p) и (p, q), (p) для плавающей запятой, (p, q) для фиксированной запятой , хотя q по умолчанию равно 0, когда оно отсутствует в спецификации точности с фиксированной точкой.
Тогда вы можете быть удивлены DE C. Вам, вероятно, следует использовать FIXED DEC (p,q)
, чтобы получить то, о чем вы, вероятно, думаете, как число с фиксированной точкой, например валюта. Скорее всего, они закодированы в виде упакованного десятичного числа, где каждый ди git хранится в клочке (4 бита) со знаком в последнем клочке. Таким образом, 123.45 будет храниться как x'12 34 5f'
, где x'f'
положительно или без знака, а x'd'
отрицательно. Десятичная точка принимается, а не сохраняется.
Таким образом, для суммирования, для точных вычислений используйте FIXED DEC
, а для вычисления с плавающей запятой - BIN
или FLOAT BIN
.