45 lines
1.5 KiB
Plaintext
45 lines
1.5 KiB
Plaintext
Performing math on variables that are declared - explicitly or implicitly - as ``++DISPLAY++`` or ``++NATIONAL++`` is much less efficient than on ``++COMPUTATIONAL++``, ``++COMP++``, or ``++BINARY++`` variables. That's because ``++COMP++`` variables, for instance, are defined for binary storage, which makes math on them more efficient. That's why values that are going to be used primarily for math should be declared with a math type. When math isn't a primary use, it may not make sense to change the declared type, but ``++MOVE++``ing the value to a ``++COMP++`` variable and performing the math on it instead would.
|
|
|
|
|
|
It is important to note however, that ``++COMPUTATIONAL++``, ``++COMP++``, and ``++BINARY++`` formats should be used with caution if the variable will be passed to other systems which may not use the same storage format.
|
|
|
|
|
|
== Noncompliant Code Example
|
|
|
|
[source,cobol]
|
|
----
|
|
01 W-AMOUNT-VALUE PIC 9(17).
|
|
01 W-AMOUNT-DECIMAL PIC 9.
|
|
|
|
COMPUTE W-CONV-AMOUNT = W-AMOUNT-VALUE * 10 ** W-AMOUNT-DECIMAL *> Noncompliant
|
|
----
|
|
|
|
|
|
== Compliant Solution
|
|
|
|
[source,cobol]
|
|
----
|
|
01 W-AMOUNT-VALUE PIC 9(17) COMP-5.
|
|
01 W-AMOUNT-DECIMAL PIC 9 COMP-5.
|
|
|
|
COMPUTE W-CONV-AMOUNT = W-AMOUNT-VALUE * 10 ** W-AMOUNT-DECIMAL
|
|
----
|
|
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
include::message.adoc[]
|
|
|
|
include::highlighting.adoc[]
|
|
|
|
'''
|
|
== Comments And Links
|
|
(visible only on this page)
|
|
|
|
include::comments-and-links.adoc[]
|
|
endif::env-github,rspecator-view[]
|