Название: сравнение вещественных типов Отправлено: deMax от Июля 12, 2013, 10:03 Знаю, что для сравнения вещественных чисел нужно использовать величину погрешности - зависящую от математических операций.
Корректно ли сравнивать float, double, QRectF... если над ними не проводились математические операции? например такой код: Код: const float k = 180.; Например рисую пирог, и задаю начальный градус и конечный, если от -180.0 до 180.0 значит рисую другой функцией круг. Название: Re: сравнение вещественных типов Отправлено: Old от Июля 12, 2013, 10:07 Корректно ли сравнивать float, double, QRectF... если над ними не проводились математические операции? Скажем так, в этом случае сравнение покажет правильный результат. Но делать так опасно, никогда не знаешь, что нужно будет изменить в проекте, случайно добавите калькуляцию и все может тихо перестать работать. Название: Re: сравнение вещественных типов Отправлено: deMax от Июля 12, 2013, 10:19 Скажем так, в этом случае сравнение покажет правильный результат. Но делать так опасно, никогда не знаешь, что нужно будет изменить в проекте, случайно добавите калькуляцию и все может тихо перестать работать. Калькуляция в том месте не может появиться в принципе, потому что в этой переменной содержаться исходные данные (правда они будут сохраняться и загружаться, а так же редактироваться пользователем). само же сравнение происходит с некоторыми магическими числами(причем целыми), для того чтобы упростить математику и рисование для частных случаев.p.s. я решил так сделать потому что не хотел вводить дополнительную переменную флаг, о том что переменная равна (-180. , 180.) Название: Re: сравнение вещественных типов Отправлено: Old от Июля 12, 2013, 10:25 p.s. я решил так сделать потому что не хотел вводить дополнительную переменную флаг, о том что переменная равна (-180. , 180.) А почему так не хотите?Знаю, что для сравнения вещественных чисел нужно использовать величину погрешности Название: Re: сравнение вещественных типов Отправлено: mutineer от Июля 12, 2013, 10:28 Код: else a = calc(); Название: Re: сравнение вещественных типов Отправлено: Swa от Июля 12, 2013, 11:35 Если значение нужно сравнивать с другим, можно его хранить в int, например в случае с 1 знаком после запятой: 180.1 * 10 = 1801 - это значение сохраняем в переменную int и сравниваем без проблем. Когда нужно нарисовать что-то, переводим в float: (float)angle / 10.0
Название: Re: сравнение вещественных типов Отправлено: kambala от Июля 12, 2013, 11:47 есть функция bool qFuzzyCompare ( double p1, double p2 ) для этой цели
Название: Re: сравнение вещественных типов Отправлено: deMax от Июля 12, 2013, 14:01 p.s. я решил так сделать потому что не хотел вводить дополнительную переменную флаг, о том что переменная равна (-180. , 180.) А почему так не хотите?есть функция bool qFuzzyCompare ( double p1, double p2 ) для этой цели А побитно не проще сравнить?Код: else a = calc(); p.s. и далеко не вся математика убивает комплексные числа, float a(2),b(3),c(5); qDebug()<<(a+b==c); вернет true. главное чтоб округления не было. Название: Re: сравнение вещественных типов Отправлено: Old от Июля 12, 2013, 14:19 если не проводить никаких операций, то что с ними будет? Я уже написал - ничего. Главное не забыть об этом в дальнейшем... ;)Название: Re: сравнение вещественных типов Отправлено: deMax от Июля 12, 2013, 14:28 если не проводить никаких операций, то что с ними будет? Я уже написал - ничего. Главное не забыть об этом в дальнейшем... ;)Название: Re: сравнение вещественных типов Отправлено: Igors от Июля 12, 2013, 14:50 Код: if(a=k) test(); Не люблю плодить сущности, тем более в ней нет смысла. float это не вода в стакане(испариться/дождик накапает), а .. Может не стоит "так бодро"? :) Есть много вещей с флотами не так уж очевидных. ПримерКод
Код Очевидно второй оптимальнее, но тождественны ли эти 2 варианта? Название: Re: сравнение вещественных типов Отправлено: deMax от Июля 15, 2013, 11:41 Очевидно второй оптимальнее, но тождественны ли эти 2 варианта? В первом случае корень будет извлекаться всегда, во втором только при выполнении условия. Результат работы программы будет одинаков.Название: Re: сравнение вещественных типов Отправлено: Igors от Июля 15, 2013, 13:57 В первом случае корень будет извлекаться всегда, во втором только при выполнении условия. Ну этого никто и не скрывал :)Результат работы программы будет одинаков. Результат вычисления "a" будет одинаков. А вот "работы прогоаммы" может и нет |