![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Dino99rus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 10.1.2007 Репутация: 1 Всего: 2 |
Math.Cos(Math.PI); //-1
Math.Tan(Math.PI); //1 Math.Sin(Math.PI); //1.2......E-16 а должно быть 0 Также операции по вычислению градусов синуса не правельно работает. VS2005 В чем подвох. Это сообщение отредактировал(а) Dino99rus - 27.10.2007, 16:41 |
|||
|
||||
| VisualProgrammerNET |
|
|||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 1 Всего: 6 |
М.б. код сих вычислений представишь?
-------------------- 3 ГОДА НА |
|||
|
||||
| Dino99rus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 10.1.2007 Репутация: 1 Всего: 2 |
Cos и Tan считает нормално, но с Sin касячет Это сообщение отредактировал(а) Dino99rus - 27.10.2007, 02:52 |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: нет Всего: 110 |
в компьютере действительные числа представляются неточно потому и происходят погрешности вычислений 10^-16 не такая уж и плохая погрешность для большинства задач -------------------- qqq |
|||
|
||||
| CYBERDREAM |
|
|||
![]() I think, there4 I am ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1096 Регистрация: 31.10.2006 Где: CyberLand Репутация: 8 Всего: 28 |
Тогда как выход, округление с заданной степенью точности
-------------------- Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно) Telegram, skype: kuchuk.artiom |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
Dino99rus, тригонометрические функции - одни из наиболее ёмких и неточных : для их вычисления используются разложения в ряды. Если интересно, можно разложить синус в ряд Тейлора и посмотреть, какие значения получаются при различной точности. Можно посмотреть готовые примеры программ.
-------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| Bogdan1024 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1436 Регистрация: 28.9.2005 Где: Киев Репутация: 3 Всего: 13 |
Такое устраивает? -------------------- ![]() |
|||
|
||||
| Dino99rus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 10.1.2007 Репутация: 1 Всего: 2 |
Bogdan1024,
нет А если Sin 180 (в градусах), Tan 270 (в градусах) то тоже касяк и т.д.. выходом из такой ситуации я вижу только такой.
Но это будет 3-й касяк С# и меня это удручает. |
|||
|
||||
| marcusmae |
|
||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
Dino99rus, простите, что встреваю, но при чём тут градусы?
Там всё считается в радианах (не в градусах и даже не в градах).
Таким образом,
В чём проблема? Вас не устраивает точность? = Думаю, что если обратиться к другим языкам, будет что-то очень похожее. Никаких косяков тут нет. Если формальная постановка Вашей задачи позволяет минимизировать использование тригонометрии, логарифмов и экспонент, то это лучше сделать воизбежание лишних недоразумений Вот это, извините,
выглядит жутковато : как будто синус угла близкого (но не равного) нулю градусам становится равен нулю... Введите b = 1e-15. Получается, вносится ещё и дополнительная потеря точности. З.Ы. : Вам известен замечательный предел : ? -------------------- ἀπὸ μηχανῆς θεός |
||||
|
|||||
| Dino99rus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 10.1.2007 Репутация: 1 Всего: 2 |
marcusmae,
ну вообще-то, то что я делаю, называется калькулятор
ну так я там перевожу в градусы. да. Вы предлагаете сравнивать входимое значение с углами при которых они равены 0? Это сообщение отредактировал(а) Dino99rus - 27.10.2007, 16:12 |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
Понятно.
Ну, в ладонных калькуляторах, насколько можно судить, применяется ровно то, что предложил Bogdan1024 : по всем "хорошим" углам, вместо того, чтобы считать, машинка выдаёт известные точные значения. Это, видимо, как раз и сделано для того, чтобы не смущать обывателей ... а для произвольных углов будет происходить то, что Вы описали. Машинная точность - она повсюду. Другое дело, что машины считают не абы как, а следуя ISO-шным стандартам. Это сообщение отредактировал(а) marcusmae - 27.10.2007, 16:15 -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| Dino99rus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 10.1.2007 Репутация: 1 Всего: 2 |
marcusmae,
и этого никак не избежать Не понял то Вы говорите, что как я написал не корректно, то это сойдет. Мне хотелось бы точно знать, как можно минимизировать погрешность Это сообщение отредактировал(а) Dino99rus - 27.10.2007, 16:22 |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
Возьмите формулы разложений синуса, косинуса, и Вы поймёте, почему это происходит. Если придумаете более точные алгоритмы для произвольных углов - впервые дадут Нобелевскую премию по математике - это как минимум Это сообщение отредактировал(а) marcusmae - 27.10.2007, 16:21 -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| Dino99rus |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 83 Регистрация: 10.1.2007 Репутация: 1 Всего: 2 |
marcusmae,
прошу прощении за офтом. Я там выше отредоктировал прочти. |
|||
|
||||
| marcusmae |
|
||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 5 Всего: 39 |
Нет, я сомневаюсь в состоятельности приведённого Вами кода с условием на малость (и привёл тому пример), предлагаю явно забить условия для известных углов :
, а в остальном расслабиться. Это сообщение отредактировал(а) marcusmae - 27.10.2007, 16:35 -------------------- ἀπὸ μηχανῆς θεός |
||||
|
|||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |