![]() |
|
![]() ![]() ![]() |
|
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... |
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
_hunter а с точки зрения грамотности будет выгоднее вынести это преобразование в отдельную функцию? При условии, что мне надо меня формат, т.е. кол-во отображаемых знаков после запятой?
|
|||
|
||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
в отдельную функцию смысла нет ( разве что читаемость немного повысить )
можно в том месте, где задается число знаков и формировать строку формата: formatStr = "%0." + IntToStr(precision) + "f"; AnsiString().sprintf(formatStr, (double)(Sin(DegToRad(angle)))); -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
Окей. Спасибо. Так и сделаю.
|
|||
|
||||
Mal Hack |
|
||||||||||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
Хм, пишу вот так:
Выдает:
или
Выдает:
Объявленно, как:
|
||||||||||
|
|||||||||||
Partizan |
|
||||||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 7 Всего: 67 |
Потому что слева у тебя char...а справа AnsiString...
Писать нужно так:
или так...
Либо вообще так:
Это сообщение отредактировал(а) Partizan - 6.1.2006, 18:36 -------------------- СУВ, Partizan. |
||||||
|
|||||||
Mal Hack |
|
||||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
Это в моем случае получается несколько не рационально. Воспользовался вариантом:
Эх, никак не могу привыкнуть, что AnsiString это не простая строка, а целый класс... Спасибо. Добавлено @ 18:43 Стоп. Выдает все равно [C++ Error] Unit2.cpp(39): E2277 Lvalue required |
||||
|
|||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 7 Всего: 67 |
а...ну дык пральна...
если уж ты остановился на том варианте переопредели Prec так
-------------------- СУВ, Partizan. |
|||
|
||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
+ не понятно чем AnsiString не нравится. почему бы ее и не использовать?
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
Mal Hack |
|
||||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
Когда подставляю в формат, мне пишет несоответствие типов cont char * и AnsiString.
Пробовал. Ругается вот так: [C++ Error] Unit2.cpp(39): E2235 Member function must be called or its address taken Т.е. мы как-то не правильно в указатель пишем. |
||||
|
|||||
Partizan |
|
||||||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 7 Всего: 67 |
когда подставляешь в формат не забывай вызывать !!!c_str()!!! Prec.c_str() - это у тебя должно быть в формате в случае AnsiString Prec; гммм...щас посмотрим... E2235 Member function must be called or its address taken A reference to a member function must be called, or its address must be taken with & operator.... возможно ты опечатался... лично у меня следующий тест проходит на ура:
-------------------- СУВ, Partizan. |
||||||
|
|||||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
||||
|
||||
TIGERоX |
|
||||
начинающий... ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 7.9.2005 Репутация: 1 Всего: 1 |
используя ансистринг
если не нравится замени на char
Все должно ботать |
||||
|
|||||
Mal Hack |
|
||||||||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
Не катит. Таже фигня. Может это уже особенности BDS, но факт остается фактом.
Такой вариант работает, но не хочу я каждый раз вызывать лишнюю функцию. В общем, сделал вот так:
Добавлено @ 22:39 Блин, а так AccessViolation выкидывает ![]() Добавлено @ 22:51
- Компилится, но когда подставляю формат, появляются какие-то квадраты ![]() |
||||||||
|
|||||||||
BreakPointMAN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 6 Всего: 24 |
НУ МАТЬ МОЯ ЖЕНЩИНА!..
Нельзя, блин, так, блин, делать... блин... ибо "("%." + IntToStr( PrecComboBox -> ItemIndex ) + "f")" это временный объект... Нельзя взять его char*-представление, и потом использовать этот адрес для инициализации указателя... Временный объект будет разрушен после выполнения этой строки, и по указателю фиг знает что будет лежать, блин. -------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 7 Всего: 67 |
А ты весь код приведи....вот и разберёмся...
-------------------- СУВ, Partizan. |
|||
|
||||
Mal Hack |
|
||||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
Сразу надо было говорить ![]() Сделал так:
|
||||
|
|||||
Mal Hack |
|
||||||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
Так, вроде бы со всем разобрался...
Но есть такой глюк. Есть несколько вот таких функций, висящих на разных кнопках и изменяющих разные Edit'ы. (*)
Есть список, из 9 элементов, котоый дает уже знакомую точность. Вот у него идет обраюотка на OnChange. Вот функция
Как видно, она вызывает вот те самые функции (*) Так вот, когда я выбираю, все значения в этих функциях изменяют значения при выводе на новую точность. Все это работает. Но, вот если я выбрал точность, начиная с 4 ItemIndex или %0.3f, то если нажать на кнопку, все поля, которые должны пересчитаться - обнуляются. Why? Внутри функций Prec используется только как:
Т.е. Prec не ПЕРЕОПРЕДЕЛЯЕТСЯ в них. |
||||||
|
|||||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
странно. по коду граблей не видно... нужно отладчиком походить.
а что будет если так: LogEdit10 -> Text = AnsiString().sprintf("%0.3f", (double) Log10( x ) ); написать? -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
Так все остается, как надо.
Странно, но Prec изменяет свое значение при клике на кнопки. Почему? Фиг знает, ведь она там не изменяется. Я так чувствую, что где-то я очень глупо указатель использую. Вот прикладываю исходник. Это сообщение отредактировал(а) Mal Hack - 10.1.2006, 19:01 Присоединённый файл ( Кол-во скачиваний: 3 ) ![]() |
|||
|
||||
teesync |
|
|||
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 26.7.2022 Репутация: нет Всего: нет |
Модератор: Сообщение скрыто. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |