1. 導入:なぜCOBOLで三角関数なのか
業務システムといえば「四則演算」が中心ですが、建設、土木、測量、あるいは物流における最適化計算など、専門的な領域では三角関数が必要になる場面があります。外部ライブラリを呼び出す手間をかけず、COBOLの標準機能である組込関数(Intrinsic Functions)を使うだけで、高度な幾何学的計算をスマートに実装できます。今回は、三角関数を安全に使いこなすためのポイントを解説します。
2. 基礎知識:ラジアンと度数法の変換
COBOLのSIN/COS/TAN関数に渡す引数は、度数法(0〜360度)ではなく「ラジアン(Radian)」である点に注意が必要です。
180度がπ(円周率)ラジアンに相当するため、度数からラジアンへの変換式は「ラジアン = 度数 × π ÷ 180」となります。この計算を忘れてそのまま度数を渡すと、期待した結果が得られませんので注意しましょう。
3. 実装/解決策
実務で三角関数を使う際は、精度の高い計算を行うために、変数の型をCOMP-2(浮動小数点型)で定義するのが鉄則です。また、円周率をハードコーディングするのではなく、定数として定義しておくことで、メンテナンス性と精度の向上を図ります。
4. サンプルプログラム
以下は、30度のサイン(SIN)を求める簡単なプログラム例です。
IDENTIFICATION DIVISION.
PROGRAM-ID. TRIG-SAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
- 円周率の定義(高精度な計算のためCOMP-2を使用)
01 PI-VAL COMP-2 VALUE 3.141592653589793238.
01 WS-DEGREE COMP-2 VALUE 30.
01 WS-RADIAN COMP-2.
01 WS-RESULT COMP-2.
PROCEDURE DIVISION.
- 度数からラジアンへ変換 (ラジアン = 度数 PI / 180)
COMPUTE WS-RADIAN = WS-DEGREE PI-VAL / 180.
- SIN関数を呼び出し
COMPUTE WS-RESULT = FUNCTION SIN(WS-RADIAN).
- 結果の表示
DISPLAY “角度: ” WS-DEGREE “度”
DISPLAY “SIN値: ” WS-RESULT.
STOP RUN.
5. 応用・注意点
現場で陥りやすい罠として、「精度の誤差」が挙げられます。浮動小数点計算には微小な誤差がつきものです。例えば、本来「0」になるはずの計算結果が「0.0000000000000001」のように出力されることがあります。
比較処理を行う場合は、直接値が等しいか判定するのではなく、「IF FUNCTION ABS(A – B) < 0.00001」のように、許容誤差(イプシロン)を用いた判定を行うのが、ベテランの技術者としての嗜みです。ぜひ現場のコードで活用してください。

コメント