2016-11-23 4 views

答えて

3

複合* 16はFortran(90またはそれ以前)ではありません。 データ型が複雑(real64)(または非標準複合体* 16)の場合、標準ジェネリックexp()は対応する精度と範囲を選択します。

2

ここで、各部分(実数と虚数)は64ビットですか?

あなたがCOMPLEX(KIND = 8)(Intel)と言うなら、あなたは実数と虚数のそれぞれについて64ビットを得ます。非常にほとんどありません

PROGRAM ABC 
USE ISO_C_BINDING 
IMPLICIT NONE 

COMPLEX(KIND=C_FLOAT_COMPLEX) :: A 
COMPLEX(C_DOUBLE_COMPLEX)  :: B 
COMPLEX(C_LONG_DOUBLE_COMPLEX) :: C 

WRITE(*,*) SIZEOF(A)=',SIZEOF(A) 
WRITE(*,*) SIZEOF(B)=',SIZEOF(B) 
WRITE(*,*) SIZEOF(C)=',SIZEOF(C) 

END PROGRAM ABC 
+0

複合体の各部分に64ビットの記憶域が必要な場合は、 'use iso_fortran_env、only:real64;複合(kind = real64)z;終わりは最高の賭けかもしれません。しかし、これは本当にそのような値をどのように累乗するかという問題には言及していません。 – francescalus

+0

私には分かりません。私はFortranで数ヶ月間しかコードを書いていませんでしたが、以前のコードから学んだので、実際に何が本当に行われているかわからずに、複雑な変数を複雑なものとして宣言しています。 – mwoua

+1

複合体* 16は、ibm360 fortran66からのキャリーオーバーです。実数と虚数のそれぞれ8バイトを意味するため、複素数(real64)と同じ動作をします。 Real64は、言及されたコンパイラの値が8です。 – tim18

2

のFortran 77以降:私は、それはあなた自身のために見る」そしてISO_C_BINDINGを使用してして(私はほとんどのポータブル思う)最高のかもしれ

...与えるもののgfortran確認する必要があります引数として渡さない限り、DEXP()を直接使用する理由があります。

一般的な表現では、すべての累乗にgeneric EXP()を使用してください。

まれに、関数への引数としてDEXP()が渡された場合は、同等ではなく、汎用EXP()を呼び出すラッパー関数を記述する必要があります。

関連する問題