Я работаю с REAL
числами вроде 4*10**11
, и компилятор жалуется, что числа слишком большие, он говорит
Ошибка: арифметическое переполнение при (1)
Я пытался использовать REAL*8
и REAL*16
, но это не решает проблему
Как я могу решить эту проблему?
MWE может быть таким:
INTEGER nioni
REAL fg,t,num,c1,minimo,massimo,en0,alpha,func
fg=0.047214
t=0.00000015
num=3688100.
c1=5.30
minimo=0.469185*fg*t
massimo=7.4*10**11*fg*t
DO nioni=1, 10
en0=(0.1+(20.-0.1)*rand())
func=num*(1./(en0+c1)**c2)*en0**c3*fg*t
alpha=minimo+(massimo-minimo)*rand()
DO WHILE(alpha.gt.func)
en0=(0.1+(20.-0.1)*rand())
func=num*(1./(en0+c1)**c2)*en0**c3*fg*t
alpha=minimo+(massimo-minimo)*rand()
WRITE(*,*) en0
END DO
END DO