Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Fortran > Вычисление arcsin на Intel и GNU Fortran


Автор: Dark Elf 7.4.2014, 06:03
Добрый день

Имеется упомянутая в прошлой теме задача вычисления arcsin (из книги Рыжикова "Современный Фортран")

Вот сама функция

Код

program test

    implicit none

    integer :: iter = 12345
    real :: value = 1.0/sqrt(2.0)

    print *, 'The arcsin of ', value, ' is ', arcsin(value, iter) * 45 / atan(1.0)

contains

    function arcsin(value, iter) result(s)

        integer :: iter, i, j
        real :: value, k, s
        do i = 1, iter, 2
            k = 1
            do j = 1, i
                if (mod(j, 2) == 0 .or. j == i) then
                    k = k / j
                else
                    k = k * j
                end if
            end do
            s = s + k * value ** i
        end do

    end function arcsin

end program test



А теперь вот в чём вопрос - если в GNU Fortran она работает правильно и выдаёт 45 градусов то эта же функция скомпилированная в Intel Fortran 2013 SP1 выдаёт -6.1520865E+09. Я только второй день Фортран изучаю может это я делаю что-то не так?

Буду очень рад если поможете хотелось бы разобраться что и как.

Автор: FCM 8.4.2014, 11:58
Может сказывается, что s непроинициализирована. (Наверное, компилятор предупреждение выдавал?)

Попробуй перед циклом
s = 0.


PS/ 
использование одинарной точности тоже, как правило, чревато неприятностями. 

Автор: Фантом 14.4.2014, 13:22
Цитата(Dark Elf @  7.4.2014,  07:03 Найти цитируемый пост)

А теперь вот в чём вопрос - если в GNU Fortran она работает правильно и выдаёт 45 градусов то эта же функция скомпилированная в Intel Fortran 2013 SP1 выдаёт -6.1520865E+09.

Интересно, у меня с точностью до наоборот (IFC - правильный ответ, gfortran - что-то неверное).

Проблема действительно именно в отсутствии инициализации переменной s. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)