fortran 乱数を用いてcosθをベクトリから求めるプログラム
乱数を配列に格納してcosθをベクトルから求めるプログラムを書いてみたのですが、コンパイルしてみるとrandom_numberのところの設定がおかしいみたいでうまくコンパイルできません。どこに問題があるのかわからないので困っています。教えて下さい。よろしくお願いします。
module subprogs
implicit none
contains
function vec_cos(a,b) result(vcos)
real(8), intent(in) :: a(:), b(:)
real(8) ab, vcos
if (size(a) /= size(b)) stop ' sr : size(a) /= size(b) '
ab = dot_product(a,a) * dot_product(b,b)
if (ab == 0.0d0) then
vcos = 0.0d0
else
vcos = dot_product(a,b)/sqrt(ab)
endif
end function vec_cos
end module subprogs
program main
use subprogs
implicit none
real(8), allocatable :: x(:), y(:)
integer n
write(*,'(a)', advance = 'no') ' input n : '
read(*,*) n
if ( n < 1 .or. n > 100 )stop ' n must be 0 < n < 101 '
allocate(x(n),y(n))
call random_seed
call random_number(x,y)
write(*,*) 'cos = ', vec_cos(x,y)
end program main
コンパイル結果
Undefined symbols:
"_random_number__", referenced from:
_MAIN_ in ccxYbc0C.o
ld: symbol(s) not found
お礼
なるほど。言語はfortranですが、初期設定しなければ毎回同じ値が出てきました。 また、初期設定をすると実行するたびに異なった乱数が表示されました。乱数の初期設定について理解できました。ありがとうございました。