Название: Полезная строка/inline Отправлено: Igors от Август 09, 2009, 22:46 Добрый день
Разбирался с чужой программой и нашел строчку if (!(a >= 0) && !(a < 0)) { ... } Это совсем не бессмысленно (как с первого взгляда кажется :-) Название: Re: Полезная строка/inline Отправлено: spectre71 от Август 09, 2009, 22:58 Добрый день Всегда == false => бред!Разбирался с чужой программой и нашел строчку if (!(a >= 0) && !(a < 0)) { ... } Это совсем не бессмысленно (как с первого взгляда кажется :-) Название: Re: Полезная строка/inline Отправлено: Hellraiser от Август 09, 2009, 23:11 Абсолютно бессмысленно: блок выполнится только при истинности левой (!(а>=0)) и правой частей (!(a<0)). Применив отрицание, получим левую часть a<0 и правую - a>=0. Какое же значение для одновременного выполнения условий может принимать а, если вся область чисел рассмотрена?
Название: Re: Полезная строка/inline Отправлено: f-r-o-s-t от Август 09, 2009, 23:17 Наверное все просто и там внутри просто написан код, который никогда не должен выполняться =)
Название: Re: Полезная строка/inline Отправлено: BlackTass от Август 09, 2009, 23:35 Еще есть вариант что архитектуру разрабатывал человек с неустойчивой психикой и a является экземпляром класса, в котором переопредлены операторы >= и < таким образом, что данное условие в некоторых случаях может выполняться ;)
Название: Re: Полезная строка/inline Отправлено: Igors от Август 09, 2009, 23:36 Абсолютно бессмысленно: блок выполнится только при истинности левой (!(а>=0)) и правой частей (!(a<0)). Применив отрицание, получим левую часть a<0 и правую - a>=0. Какое же значение для одновременного выполнения условий может принимать а, если вся область чисел рассмотрена? В том-то и дело, что не вся :)Название: Re: Полезная строка/inline Отправлено: Igors от Август 09, 2009, 23:44 Еще есть вариант что архитектуру разрабатывал человек с неустойчивой психикой и a является экземпляром класса, в котором переопредлены операторы >= и < таким образом, что данное условие в некоторых случаях может выполняться ;) - никаких классов/перегрузок нет. - писал болгарин, очень сильный программер - работает на любой платформе и размер в 10 раз меньше чем делать то же по-другому (как, кстати было сделано у меня ;)) Название: Re: Полезная строка/inline Отправлено: spectre71 от Август 10, 2009, 00:05 - никаких классов/перегрузок нет. Да... :D :D :D- писал болгарин, очень сильный программер - работает на любой платформе и размер в 10 раз меньше чем делать то же по-другому (как, кстати было сделано у меня ;)) Особенно прикольно про любую платформу. Название: Re: Полезная строка/inline Отправлено: lit-uriy от Август 10, 2009, 08:36 Если к записи:
!(a >= 0) && !(a < 0) применить правило деМоргана, то получим: !((a >= 0) || (a < 0)) (в некоторых случаях может быть нагляднее) Но смысла записи я всё-равно не понял Название: Re: Полезная строка/inline Отправлено: Tonal от Август 10, 2009, 10:14 Тип a не float || double часом? :)
Название: Re: Полезная строка/inline Отправлено: Igors от Август 10, 2009, 16:36 Тип a не float || double часом? :) ДаНазвание: Re: Полезная строка/inline Отправлено: Alex Custov от Август 11, 2009, 01:41 проверка на -0 штоле?
Доп. Хотя нет, -0 == 0, так что (a >= 0) вернет true... Название: Re: Полезная строка/inline Отправлено: Tonal от Август 11, 2009, 11:14 Хороший приём. :)
Название: Re: Полезная строка/inline Отправлено: spectre71 от Август 11, 2009, 11:30 Хороший приём. :) Для любого a имеющего тип объекты которого принадлежат упорядоченному множеству и операции "<" , ">" "==", ..., правильно определены для данного типа, данное выражение ВСЕГДА false.Соответственно, для любого значения float и double - ВСЕГДА false. Так что ничего полезного в нем нет! Над вами просто прикололись! Название: Re: Полезная строка/inline Отправлено: SASA от Август 11, 2009, 11:33 проверка на -0 штоле? Можно по подробнее.Название: Re: Полезная строка/inline Отправлено: Alex Custov от Август 11, 2009, 11:50 http://ru.wikipedia.org/wiki/Машинный_ноль Название: Re: Полезная строка/inline Отправлено: Tonal от Август 11, 2009, 12:07 2 Spectre Учи матчасть: Nan (http://ru.wikipedia.org/wiki/Nan)
Название: Re: Полезная строка/inline Отправлено: Igors от Август 11, 2009, 13:15 Можно по подробнее. Можно. Примерdouble a = sqrt(-1.0); if (!(a >= 0) && !(a < 0)) printf("a is invalid"); Условие возвращает true и printf выполняется. На практике это удобный способ проверить "живы ли еще расчеты" (или уже молотим Nan'ы). Ну а насчет "приколов" - стар я уже чтобы глупыми шутками заниматься :) Название: Re: Полезная строка/inline Отправлено: spectre71 от Август 11, 2009, 13:40 2 Spectre Учи матчасть: Nan (http://ru.wikipedia.org/wiki/Nan) Век живи век учись. Никогда этим не пользовался и соответственно не знал.Получается что double(float) не являются упорядоченным множеством :) Название: Re: Полезная строка/inline Отправлено: Rcus от Август 11, 2009, 13:56 Условие возвращает true и printf выполняется. На практике это удобный способ проверить "живы ли еще расчеты" (или уже молотим Nan'ы). Я не слишком знаком с экзотическими платформами, но разве isnan из cmath/math.h не тоже самое делает?Название: Re: Полезная строка/inline Отправлено: spectre71 от Август 11, 2009, 14:00 Условие возвращает true и printf выполняется. На практике это удобный способ проверить "живы ли еще расчеты" (или уже молотим Nan'ы). Я не слишком знаком с экзотическими платформами, но разве isnan из cmath/math.h не тоже самое делает?Название: Re: Полезная строка/inline Отправлено: Alex Custov от Август 11, 2009, 14:44 2 Spectre Учи матчасть: Nan (http://ru.wikipedia.org/wiki/Nan) А к чему такие сложности? Можно же сравнить a != a? Название: Re: Полезная строка/inline Отправлено: Igors от Август 11, 2009, 15:34 Я не слишком знаком с экзотическими платформами, но разве isnan из cmath/math.h не тоже самое делает? Я так и делал пока не увидел эту строку :) Но этого было недостаточно, нужно вызывать fpclassify и проверять варианты. Да еще на др. компиляторе _fpclass (а не fpclassify). В итоге получалось длинно и мутно. А к чему такие сложности? Можно же сравнить a != a? Можно, но так мы провоцируем оптимизатор кода. лучше таких приключений не искать. Название: Re: Полезная строка/inline Отправлено: spectre71 от Август 11, 2009, 16:22 А к чему такие сложности? Можно же сравнить a != a? Можно, но так мы провоцируем оптимизатор кода. лучше таких приключений не искать. Не факт, что какой-нибудь оптимизатор кода не схлопнет (!(a >= 0) && !(a < 0)) до false. Название: Re: Полезная строка/inline Отправлено: Igors от Август 11, 2009, 16:40 Не факт, что какой-нибудь оптимизатор кода не схлопнет (!(a >= 0) && !(a < 0)) до false. Насколько я замечал, даже абсурдные сравнения в оптимизированном коде выполняются. Но вот как сравнивать - вариантов много. Например если "а" float то для (a != a) вполне могут быть использованы целочисленные 4-байтные регистры (вместо FP). А в общем согласен, конечно - не факт. |