Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вычисление arcsin на Intel и GNU Fortran, Разные результаты 
:(
    Опции темы
Dark Elf
Дата 7.4.2014, 06:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 576
Регистрация: 26.12.2003
Где: Брисбен

Репутация: нет
Всего: 10



Добрый день

Имеется упомянутая в прошлой теме задача вычисления 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. Я только второй день Фортран изучаю может это я делаю что-то не так?

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


--------------------
PM MAIL WWW ICQ Skype GTalk Jabber MSN   Вверх
FCM
Дата 8.4.2014, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



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

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


PS/ 
использование одинарной точности тоже, как правило, чревато неприятностями. 
PM MAIL   Вверх
Фантом
Дата 14.4.2014, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 5
Всего: 49



Цитата(Dark Elf @  7.4.2014,  07:03 Найти цитируемый пост)

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

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

Проблема действительно именно в отсутствии инициализации переменной s. 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Fortran | Следующая тема »


 




[ Время генерации скрипта: 0.0918 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.