Почитал форум, понял и вооружился функцией bool IsEqual(double x,double y);
Т.е. нужно сравнивать double при помощи этой функции. Однако хочется использовать оператор "==".
Вопрос: как использовать этот оператор если его использовать нельзя ?
Варианты ответов, которые пришли мне в голову:
1. перегрузить глобальный оператор (не пробовал и есть сомнение что это можно)
2. написать класс-обертку над double. Назвать его Double.
3. использовать библиотеку. (какую предложите?)
четвертый и далее ответы предлагается найти уважаемому All.
Здравствуйте, Feonyf, Вы писали:
F>Почитал форум, понял и вооружился функцией bool IsEqual(double x,double y);
Только тут должно быть 3 параметра типа double.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, Feonyf, Вы писали:
F>Здравствуйте, Vain, Вы писали:
V>>Только тут должно быть 3 параметра типа double.
F>Здесь F>http://rsdn.ru/forum/cpp/458196.1.aspx
F>решение с двумя параметрами. Оно меня пока устраивает.
F>Кстати. Подскажите пожалуйста библиотеку которая для вычислений не превращает дробные числа в плавающую точку а хранит их виде пары целых чисел.
Здравствуйте, Feonyf, Вы писали:
F>Здравствуйте, Vain, Вы писали:
V>>Только тут должно быть 3 параметра типа double.
F>Здесь F>http://rsdn.ru/forum/cpp/458196.1.aspx
F>решение с двумя параметрами. Оно меня пока устраивает.
F>Кстати. Подскажите пожалуйста библиотеку которая для вычислений не превращает дробные числа в плавающую точку а хранит их виде пары целых чисел.
Вроде как epsilon корректно использовать только, когда справниваемые чился порядка 1.0... тут даже тема есть, с объяснениями, можете поискать...
Почему при вызове опертора == для double компилятор не выдаёт даже варнинга? Это, ведь, очевидно что лажа получается.
(Проверял на VC2010)
Разве бывают практические случаи когда вызывать этот оператор есть смысл ?
Здравствуйте, Feonyf, Вы писали:
F>Привет всем. Столкнулся с "приятными" моментами связанные с плавающей точкой.
Еще вопрос насчет библиотеки, которая отличается от boost::rational.
Вступление:
Есть некоторая последовательность вычислений в которой некое число умножается на корень из двух а потом некоторое время спустя делится на корень из двух.
Понятно что человек сделает точные вычисления — выкинет умножение и деление на этот корень т.к. это единица.
Вопрос:
есть ли в природе такая библиотека которая так делает ?
Т.е. есть некий, назовём условно boost::rational2, который работает примерно следующим образом (написано от первого лица):
0. у меня есть x
1. меня умножают на пи. Это число в обычной дроби не представить поэтому я запомню что меня умножали на него
2. ко мне прибавляют 25 но я состою из пи умноженного на x, поэтому я запомню что мне нужно прибавить к этому делу 25
3. ко мне прибавляют 16. О! Ко мне уже прибавляли 25 я сейчас к этому прибавлю еще 16. Т.е. сейчас у меня есть x умноженный на пи и прибавленное 41. (41 это 16+25)
4. от меня просят double! Хорошо, сейчас я умножу x на 3.14 и прибавлю 41 и отдам им этот double.
F>Почему при вызове опертора == для double компилятор не выдаёт даже варнинга? Это, ведь, очевидно что лажа получается. F>(Проверял на VC2010)
А почему компилятор должен значь что ты хочешь сделать? Может ты действительно на чистое равенство хотел проверить? F>Разве бывают практические случаи когда вызывать этот оператор есть смысл ?
На равенство то? Да нули на равенство хотя-бы проверить.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
On 16.11.2010 23:28, Feonyf wrote: > Т.е. нужно сравнивать double при помощи этой функции. Однако хочется > использовать оператор "==". > > Вопрос: как использовать этот оператор если его использовать нельзя ?
Его не "нельзя использовать". Его НЕ НУЖНО испльзовать. В нём НЕТ НАДОБНОСТИ.
Так же, как и в сравнении двух double-ов на равенство.
Поймите вы все (задающие подобные вопросы) эту простую вещь.
F>>решение с двумя параметрами. Оно меня пока устраивает.
AL>Интересно, почему там точность нормируется относительно суммы сравниваемых значений, а не максимума из них?
Здравствуйте, A.Lokotkov, Вы писали:
AL>Интересно, почему там точность нормируется относительно суммы сравниваемых значений, а не максимума из них?
Возможно, это быстрее...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском