fortran66のブログ

fortran について書きます。

IEEE754規格では浮動小数点の取り方から0に+0と-0の二通りの表記が許されます。

ここで複素関数などを扱う場合、リーマン面のカットライン近傍において近づく方向に依存して極限が異なる場合があるので、+0と-0がそれぞれ正からの極限と負からの極限の意味であると解釈できると便利になります。

Fortran2003でそれが規格として取り入れられたのはもっともな気がします。

ただし、コンパイラ・オプションで指定しないと駄目なようです。

PROGRAM test
IMPLICIT NONE
REAL :: x = -9.0
PRINT *, 'SIGN',  SIGN(0.0, 1.0), SIGN(0.0, -1.0)
PRINT *, ATAN2(-0.0, x), LOG(CMPLX(x, -0.0)), SQRT(CMPLX(x, -0.0))
STOP
END PROGRAM test