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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2012, 18:16   #1
DJEK-ROUTER
 
Регистрация: 03.04.2012
Сообщений: 4
По умолчанию проблема с sin

Здравствуйте! я делаю калькулятор на Delphi. в данном случае я ввожу любое число в Edit1. затем нажимаю на button1, которая имеет следующий код:
edit1.text:=floattostr(sin(strtoflo at(edit1.Text)*pi/180));

все идет отлично, но стоит ввести число в edit1 180, 540 и все числа, где синус x будет равен 0, выдает число -5,42101086242752E-20

почему это происходит и как это исправить?

Последний раз редактировалось DJEK-ROUTER; 03.04.2012 в 18:25.
DJEK-ROUTER вне форума Ответить с цитированием
Старый 03.04.2012, 18:27   #2
robt
Заблокирован
 
Регистрация: 21.06.2010
Сообщений: 77
По умолчанию

все правильно пишет
robt вне форума Ответить с цитированием
Старый 03.04.2012, 18:34   #3
DJEK-ROUTER
 
Регистрация: 03.04.2012
Сообщений: 4
По умолчанию

у вас sin(180)=0? а почему тогда у меня sin(180) выдает неправильный ответ?(((
DJEK-ROUTER вне форума Ответить с цитированием
Старый 03.04.2012, 18:39   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
почему тогда у меня sin(180) выдает неправильный ответ
Нормальный ответ. Округлите результат до нескольких знаков после точки. Думаете 1.1-1.1 точный ноль даст? Почитайте про двоичное представление чисел с плавающей точкой, порядок, мантиссу
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.04.2012, 19:40   #5
robt
Заблокирован
 
Регистрация: 21.06.2010
Сообщений: 77
По умолчанию

Цитата:
Сообщение от DJEK-ROUTER Посмотреть сообщение
у вас sin(180)=0? а почему тогда у меня sin(180) выдает неправильный ответ?(((
у тебя скобки неправильно раставлены значит
или ты незнаеш что хочеш,вот так видит твою формулу комп sin(180*pi/180) в итоге sin(pi)

Последний раз редактировалось robt; 03.04.2012 в 19:42.
robt вне форума Ответить с цитированием
Старый 03.04.2012, 19:46   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Со скобками все нормально и градусы в радианы тоже нормально переводятся
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.04.2012, 19:54   #7
robt
Заблокирован
 
Регистрация: 21.06.2010
Сообщений: 77
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Со скобками все нормально
тогда просвяти где он там узрил sin(180)
robt вне форума Ответить с цитированием
Старый 03.04.2012, 19:58   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
-5,42101086242752E-20
это число записано в Экспоненциальной записи

означает -5.421010 * 10^-20
или, если записать в более привычной форме:
-0.0000000000000000000542101086242

это погрешности представления числа в машинном виде.
для понимания сути происходящего очень рекомендую сходить в ЭТОТ мой пост и пройтись по ссылкам.

и, как было справедливо сказано выше - округляйте его хотя бы до 15 знаков после запятой, получите ноль...


____________
Цитата:
Сообщение от robt
или ты незнаеш что хочеш,вот так видит твою формулу комп sin(180*pi/180) в итоге sin(pi)
...
тогда просвяти где он там узрил sin(180)
не позорьтесь, почитайте, что такое радианы, что такое градусы, как эти величины переводятся друг в друга... и чему равен угол 180 градусов в радианах..
и, очевидно, что TC в Edit1.Text задаёт число 180 - величину угла в ГРАДУСАХ. а в формуле они (правильно!) переводятся в радианы!

Последний раз редактировалось Serge_Bliznykov; 03.04.2012 в 20:07.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.04.2012, 20:14   #9
robt
Заблокирован
 
Регистрация: 21.06.2010
Сообщений: 77
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
не позорьтесь, почитайте, что такое радианы
я чето невъехал где я позорюсь?
второй пост сверху почитай,там ответ на всю эту тему
а потом третий,и где он там узрил sin(180)?
robt вне форума Ответить с цитированием
Старый 03.04.2012, 20:15   #10
DJEK-ROUTER
 
Регистрация: 03.04.2012
Сообщений: 4
По умолчанию

я все понял) спасибо за помощь!
DJEK-ROUTER вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль Вычислить у - первое из чисел sin х, sin sin x, sin sin sin x, ..., меньшее по модулю 10-4 Kikikiss Помощь студентам 2 25.03.2012 13:58
Вычисление суммы:sinx+sin(sinx)+sin(sin(sinx)) ..+..sin(..(sinx)) на дельфи Nach Помощь студентам 3 16.11.2011 10:05
Функция y=2cos(3пx)sin(пx)+(sin(3пx)/x) ofenod Microsoft Office Excel 5 07.04.2011 03:22