2011-01-18 4 views
2

Я хотел бы вычислить гамма (-170.1) с помощью программы ниже:Результата GAMMA недостаточного своего рода

program arithmetic 
! program to do a calculation 
real(8) :: x 
x = GAMMA(-170.1) 
print *, x 
end program 

, но я получаю сообщение об ошибке:

test.f95:4.10:

x = GAMMA(-170.1) 1 Error: Result of GAMMA underflows its kind at (1)

, когда я компилирую с gfortran. Согласно Maple gamma (-170.1) = 5.191963205 * 10^(- 172), который, я думаю, должен находиться в пределах диапазона показателя переменной x, как я его определил.

ответ

1

-170.0 можно рассматривать как поплавок. Если это так, изменение этой проблемы в двойном должно решить проблему.

5

Ниже приведена модификация вашей программы. Помните, что в Fortran RHS оценивается до назначения LHS, а литералы с плавающей запятой имеют тип по умолчанию, то есть одинарную точность. Таким образом, делая аргумент для двойной точности GAMMA, компилятор выбирает двойную точность GAMMA.

 

program arithmetic 
! program to do a calculation 
integer, parameter :: dp = kind(1.0d0) 
real(dp) :: x 
x = GAMMA(-170.1_dp) 
print *, x 
end program 
 
+0

спасибо, что хорошо работает –

+1

@dhack Если вы считаете ответ полезным, пожалуйста, рассмотреть вопрос о принятии и/или upvoting его тогда. Люди здесь, как правило, недовольны пользователями коэффициентом принятия 0%. :) – janneb

Смежные вопросы