![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Вопрос в следующем.
Для вычисления синусов, косинусов используются стандартные функции Sin Cos. В качестве аргумента они принимают значение угла в радианах. Как вычислить тригонометрию в градусах? Есть формула перевода Рад = град * Pi/180 Есть даже функция в библиотеке Math DegToRad Все бы хорошо. Но вопрос в следующем. После математического перевода появляется естественная ошибка точности и, например, Sin (360 градусов) равен -2,44921270764475E-16. Кто-то скажет, что это "почти" ноль. Но ведь не ноль! В стандартном калькуляторе Windows выдает чистый ноль (как для синуса так и для косинуса (90)). Вопрос. Как сделать корректный калькулятор аля Windows при просчете тригонометрических функций? (не подкрученый специально для нуля, а именно корректный) Кто-то пытался? Последний раз редактировалось Taras, 04.10.2013 в 01:53. |
#2
|
|||
|
|||
![]() RoundTo не спасет?
Просто "сбрось" немного точность. Что-то типа такого: Код:
procedure TForm1.Button1Click(Sender: TObject); var Grad : Double; begin If TryStrToFloat(Edit1.Text,Grad) Then Edit2.Text := FloatToStr(RoundTo(Sin(Grad*PI/180),-8)) Else ShowMessage('Can''t convert string to number.'); end; |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Taras (04.10.2013)
|
#3
|
|||
|
|||
![]() Спасибо.
Красивое и правильное решение. Не перевелись светлые головы в нашей деревне. ![]() |