Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2011, 09:23   #1
Cannibal
Форумчанин
 
Регистрация: 17.02.2008
Сообщений: 191
По умолчанию Идентичные функции выдают разные результаты

Есть функция (переводиз градусной формы в радианы) на Паскале
Код:
function ToRad(x : Tangle) : real;
begin
  result := (x.grad + (x.min / 60) + (x.sec / 3600)) * pi / 180;
end;
И на С++
Код:
  float Angle::toRad(void)
  {
    float r;
    r = (grad + min/60 + sec/3600)*(pi/180);
    return r;
  }
выдаваемые ими значения на одинаковых входных данных отличаются уже в сотых долях.
В чем может быть проблема?
Mathematicians often mix up Christmas and Halloween, because Dec.25=Oct.31.
Cannibal вне форума Ответить с цитированием
Старый 21.04.2011, 11:23   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

float Angle::toRad(void)
{
float r;
r = (grad + min/60 + sec/3600)*(pi/180);
return r;
}
вариант НЕОДНОЗНАЧНОСТИ трактовки понятий min sec тобой и компилятором не рассматривался?
ты считаешь это полями класса, а компилятор чем-то другим?
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 21.04.2011, 11:44   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а я бы предложил копнуть в сторону изменения типа данных:
вместо:
Код:
function ToRad(x : Tangle) : real;
я предложил бы проверить так:
Код:
function ToRad(x : Tangle) : double;
или даже так:
Код:
function ToRad(x : Tangle) : extended;
ну и плюс типы данных
x.grad x.min x.sec должны быть тоже не real
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.04.2011, 12:55   #4
Cannibal
Форумчанин
 
Регистрация: 17.02.2008
Сообщений: 191
По умолчанию

Цитата:
вариант НЕОДНОЗНАЧНОСТИ трактовки понятий min sec тобой и компилятором не рассматривался?
ты считаешь это полями класса, а компилятор чем-то другим?
одноименных идентификаторов в программе нет. так что трактовка однозначна

Цитата:
а я бы предложил копнуть в сторону изменения типа данных:
Тоже не помогло.


Кстати написанная на бейсике подобная функция выдает результат близкий к паскалю
Mathematicians often mix up Christmas and Halloween, because Dec.25=Oct.31.
Cannibal вне форума Ответить с цитированием
Старый 21.04.2011, 13:25   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) зачем Вам большая точность?

2) в формуле присутствует констата pi
Вы сравнивали её величину в различных компиляторах?
Вполне возможно, что в каком-то N-м знаке она и отличается!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.04.2011, 13:48   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
одноименных идентификаторов в программе нет. так что трактовка однозначна
кроме ваших идентификаторов есть еще и внешние для вас и внутренние для среды (к примеру тот же PI). Не уверен что где-то нельзя найти ни min, ни sec.
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 21.04.2011, 18:29   #7
Cannibal
Форумчанин
 
Регистрация: 17.02.2008
Сообщений: 191
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
1) зачем Вам большая точность?

2) в формуле присутствует констата pi
Вы сравнивали её величину в различных компиляторах?
Вполне возможно, что в каком-то N-м знаке она и отличается!
pi я специально взял своей константой, одинаковой во всех программах. точность нужна по условию задачи. так все значения очень близкие и на выходе получается ошибка иногда даже в первом разряде
Mathematicians often mix up Christmas and Halloween, because Dec.25=Oct.31.
Cannibal вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
составить программу для вычисления значения функции и результаты выдать на печать. Бейсик SvetlanaFF Помощь студентам 13 28.10.2018 19:24
Cоставить программу для вычисления значения функции и результаты выдать на печать. Бейсик muse26 Помощь студентам 0 19.11.2010 11:37
Разные компиляторы - разные результаты Кипящий чайник Общие вопросы C/C++ 3 16.07.2010 14:54
Вычислить значения функции и вывести результаты в виде графика (функцию см.далее) {Please} timepoka Помощь студентам 10 28.02.2010 12:43
Составить программу для вычисления значения функции и результаты выдать на печать Pleasant_girl Помощь студентам 8 22.12.2009 22:57