Расширение вашей программы немного показывает, что происходит:
ijb@ianbushdesktop ~/work/stack $ cat exp.f90
program main
implicit none
integer, parameter :: dp = selected_real_kind(33,4931)
real(kind=dp) :: x = 82.4754500815524510_dp
print *, x
print *, x**4
print *,(x*x)*(x*x)
print *,Nearest((x*x)*(x*x),+1.0_dp)
print *, x**4.0_dp
end program main
Компиляция и запуск дает:
ijb@ianbushdesktop ~/work/stack $ gfortran --version
GNU Fortran (GCC) 7.4.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
ijb@ianbushdesktop ~/work/stack $ gfortran exp.f90
ijb@ianbushdesktop ~/work/stack $ ./a.out
82.4754500815524510000000000000000003
46269923.0191143410452125643548442147
46269923.0191143410452125643548442147
46269923.0191143410452125643548442211
46269923.0191143410452125643548442211
ijb@ianbushdesktop ~/work/stack $
Таким образом
Этопохоже, что компилятор достаточно умен, чтобы понять, что целочисленные полномочия могут быть получены умножением, что намного быстрее, чем общая функция возведения в степень
Использование общей функции возведения в степень отличается только на 1 битиз умножения ответа.Поскольку мы не можем сказать per se , что является более точным, мы должны принять оба одинаково точных
Таким образом, в заключение, компилятор использует простые умножения, где это возможно, вместополномасштабная процедура возведения в степень, но даже если она использует более дорогой маршрут, она дает тот же ответ, для тщательно продуманного значения слова «то же самое»