1

Fortran のサブルーチンと関数が、Fortran の組み込み関数と同じように、実数の単精度と倍精度の両方、およびさまざまな変数のその他の種類をサポートするようにしたいと考えています。x が倍精度の場合、sin(x) は正弦関数の倍精度値を返しますが、単精度は x が単精度です。

次のテストを作成し、定数 a64 と b64 を宣言し、それらを kind 値 (8) に関連付けました。入力変数 a と b が double の場合は関数split_realが倍精度の結果を出力し、入力が単精度の場合は単精度を出力するようにします。これは、関数への入力として rk パラメーターを含めることで可能ですが、コンパイラーは、宣言されていないか、定数式に還元されない変数である rk について不平を言います (GNU コンパイラー)。

これを機能させる方法に関するヒントはありますか?

 program test_kinds
 implicit none
 real(kind=4)    :: a32,b32
 real(kind=8)    :: a64,b64,divide_reals

 a64=atan(0.40)
 b64=atan(0.30)

 a32=a64
 b32=b64

 write(*,*) '32 bits :: ',divide_reals(a32,b32,4)
 write(*,*) '64 bits :: ',divide_reals(a64,b64,8)
 end program test_kinds

function divide_reals(a,b,rk)
implicit none
integer,intent(in)  :: rk
real(kind=rk),intent(in) :: a,b
real(kind=rk)            :: divide_reals

divide_reals=a/b
end function divide_reals
4

0 に答える 0