|
|
|
Mal Hack |
|
|||
Мудрый... Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
Код:
При вводе имеем: 0: sin = 0, cos =1 90: sin = 1, cos = -2.7 180: sin = -5.4, cos = -1 К примеру на углах 45, 135, 405 все в норме. |
|||
|
||||
BreakPointMAN |
|
|||
Опытный Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 6 Всего: 24 |
Что-то я не помню таких функций, как Sin и Cos... хмм...
А может, ошибка появляется при отображении? Ну, места там не хватает... или при преобразовании что-то случается... -------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
_hunter |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
насколько я помню они радианы принимают... + что за странное название ( с большой буквы )? в math.h с маленькой...
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
Mal Hack |
|
||||||||
Мудрый... Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
Я в BDS 2006. Там есть Math.hpp и Math.h, из первой - с большой буквы, из второй - с маленькой. Но замена их на маленькие результата не меняет. По крайней мере в лучшую сторону.
Все преобразования приведены выше. Вряд ли там места не хватает. На 45 все окей, как и в 0. Добавлено @ 16:28
Я им их и передаю. DegToRad преобразует. Преобразует правильно. Проверялся так:
Пишет нормальные значения PI, PI/2. |
||||||||
|
|||||||||
Illuminaty |
|
|||
/*Антон Захаров*/ Профиль Группа: Комодератор Сообщений: 1238 Регистрация: 19.3.2005 Где: Россия, Казань Репутация: нет Всего: 56 |
а если напрямую написать?
Это сообщение отредактировал(а) Illuminaty - 5.1.2006, 16:30 |
|||
|
||||
Mal Hack |
|
|||
Мудрый... Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
Не помогает.
|
|||
|
||||
Illuminaty |
|
|||
/*Антон Захаров*/ Профиль Группа: Комодератор Сообщений: 1238 Регистрация: 19.3.2005 Где: Россия, Казань Репутация: нет Всего: 56 |
а что выводит при явном задании значения переменной angle ?
Это сообщение отредактировал(а) Illuminaty - 5.1.2006, 16:45 |
|||
|
||||
_hunter |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
стоп. все правтльно оно выдает.
при 180 син не -5.4 а -5.4 * 10^(-20) ( т.е. 0 ) напиши что-то типа AngleGrid -> Cells[1][0] = AnsiString().sprintf("%.3f", Sin( angle ) ); -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
Partizan |
|
|||
Let's do some .NET Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 7 Всего: 67 |
У меня в BC++B6 результаты совершенно адекватные...
Выполнение этого кода даёт нам sin: 1,2246...........E-16 cos: 1 -------------------- СУВ, Partizan. |
|||
|
||||
Mal Hack |
|
||||
Мудрый... Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
"Что-то типа" не помогло. Помогло вот что:
Огромное тебе спасибо !!! Добавлено @ 17:16 Хотя каждый раз Round использовать не хочется |
||||
|
|||||
_hunter |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
а что значит не помогло?
минус мешает? так его убрать можно... или вообще так: if ( abs(sin) < 0.00000000001 ) sin = 0; написать а потом sprintf ему... -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
Mal Hack |
|
|||
Мудрый... Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
У косинуса при - был -0.000
Минус тут не при чем. Там 1 должна быть |
|||
|
||||
_hunter |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
похоже sprintf() с long double-ами не работает. приводи перед конвертацией к doublе -- всеравно все знаки пользователю вряд ли нужны...
AnsiString().sprintf("%0.3f", (double)(Sin(DegToRad(angle)))); -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
Mal Hack |
|
|||
Мудрый... Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
_hunter сработало. Слу, а что лучше в плане быстродействия и грамотности кода?
RoundTo или через sprintf? |
|||
|
||||
_hunter |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
интересный вопрос...
sprintf точно не меделеннее ( потому как при RounTo/FormatFloat выполняются аналогичные операции ) а возможно и быстрее -- новое значение не создается ( RounTo ) в любом случае нужно эксперимент ставить а в полане грамотности ( а точнее красоты кода ) sprintf явно лучше -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |