Арифметическое переполнение в Фортране - PullRequest
2 голосов
/ 21 июня 2019

Я работаю с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...