Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемма с нахождением тригорехмицеских значений 
V
    Опции темы
Ak47black
  Дата 30.11.2006, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: 1
Всего: 0



Вообшем если я делаю 
Код

  ShowMessage(FloatToStr(sin(DegToRad(0))));
  ShowMessage(FloatToStr(sin(DegToRad(180))));
  ShowMessage(FloatToStr(sin(DegToRad(360))));

То по идее sin(0)=sin(180)=sin(360),
Но выходит 
Sin(0)=0 нормально
Sin(180)= Аш   smile 1,22460635382238E-16
Sin(360)= -2,44921270764475E-16

Я предполагаю что тут виной всему DegToRad непрвильное конвертирование.
Решение с целыми градусными углами то мне понятно X mod 180
А как быть если число не цело?
 smile Наверника уже ктото сталкивался.
PM MAIL   Вверх
bems
Дата 30.11.2006, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



а теперь посмотри что выдаст этот код smile 
Код

ShowMessage(FloatToStr(cos(DegToRad(0))));
ShowMessage(FloatToStr(cos(DegToRad(180))));
ShowMessage(FloatToStr(cos(DegToRad(360))));

математику учим...


--------------------
Обижено школьников: 8
PM MAIL   Вверх
maxim1000
Дата 30.11.2006, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 4
Всего: 110



Цитата(Ak47black @  30.11.2006,  11:10 Найти цитируемый пост)
Sin(0)=0 нормально
Sin(180)= Аш   smile 1,22460635382238E-16
Sin(360)= -2,44921270764475E-16

а что, собственно, не устраивает?
погрешность?


--------------------
qqq
PM WWW   Вверх
Ak47black
Дата 30.11.2006, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: 1
Всего: 0



Цитата(bems @ 30.11.2006,  12:27)
а теперь посмотри что выдаст этот код smile 
Код

ShowMessage(FloatToStr(cos(DegToRad(0))));
ShowMessage(FloatToStr(cos(DegToRad(180))));
ShowMessage(FloatToStr(cos(DegToRad(360))));

математику учим...

Зачем мне косинус, тут обсуждаеться синус.

Добавлено @ 12:36 
Синус 180,1 то правильно находиться. Тогда почему 180 синус неправильно?

Добавлено @ 12:42 
Цитата(maxim1000 @ 30.11.2006,  12:30)
Цитата(Ak47black @  30.11.2006,  11:10 Найти цитируемый пост)
Sin(0)=0 нормально
Sin(180)= Аш   smile 1,22460635382238E-16
Sin(360)= -2,44921270764475E-16

а что, собственно, не устраивает?
погрешность?

То что синус 180 градусов = 1,22460635382238E-16 ,а не 0
PM MAIL   Вверх
Snowy
Дата 30.11.2006, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



У меня погрешность получилась в -5.421-20
Это вообще несущественно.
Ограничь точность 10-12 знаками и будет тебе 0 smile

Добавлено @ 13:03 
Код

  ShowMessage(FloatToStrF(sin(DegToRad(0)), ffFixed, 12, 12));
  ShowMessage(FloatToStrF(sin(DegToRad(180)), ffFixed, 12, 12));
  ShowMessage(FloatToStrF(sin(DegToRad(360)), ffFixed, 12, 12));
  ShowMessage(FloatToStrF(sin(DegToRad(60)), ffFixed, 12, 12));

PM MAIL   Вверх
Ak47black
Дата 30.11.2006, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: 1
Всего: 0



А понятно теперь в чем дело.
 smile А где я могу почитать про этот знак E ,а то с ним некогда неработал и немогу четко его понять.

Это сообщение отредактировал(а) Ak47black - 30.11.2006, 13:05
PM MAIL   Вверх
Snowy
Дата 30.11.2006, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



1E-16 = 1 * 10^-16 = 0,0000000000000001
Это скорее математика, а не программирование.
PM MAIL   Вверх
Ak47black
Дата 30.11.2006, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: 1
Всего: 0



Большое спасиб Snowy, еше хотел-бы узнать : всетаки почему синус 0 и синус 180 немного различаеться? Я как помимаю в математике они полностью равны ?  smile 
PM MAIL   Вверх
Snowy
Дата 30.11.2006, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



В математике они считаются логически-геометрическим путём.
А компьютер - машина.
Ты переводишь градусы в радианы.
Для этого используется иррациональное число пи.
Его невозможно выразить с большей точностью.
Потом мы умножаем, делим, вычисляем... Всё это накапливает погрешность.
Отсюда и разница - не равны, потому что вычисления дают разную погрешность для разных чисел ещё ДО вычисления синуса.
Да и само вычисление синуса не безгрешно.
При плавающих вычисления погрешность есть всегда.
Поэтому всегда нужно делать на неё поправку.

Добавлено @ 13:22 
Цитата(Ak47black @  30.11.2006,  13:12 Найти цитируемый пост)
очему синус 0 и синус 180 немного различаеться?
А тут вообще просто. При умножении и делении нуля - всегда ноль.
А 180 мы умнозаем на пи, потом делим на 180... Тут уже вылазит погрешность - результат уже не равен PI smile Различается в миллиардные доли.
А потом мы ещё и синус считаем не из 0, а из длиииинного числа, которое ещё и с погрешностью.
Погрешность совсем-совсем маленькая. Но она есть.
PM MAIL   Вверх
Ak47black
Дата 30.11.2006, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: 1
Всего: 0



Теперь всё понял 'конкретно' smile. Спасибо еше раз.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

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


 




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


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

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