Гм.. ответа не знал, но время есть да и интересно. Решил тоже погуглить. Нашел похожий баг: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12639 Не твой ли случай? Т.е. судя по всему бага появляется при включении оптимизации. Кстати, в гугле находил аналогичную проблему на форуме Microsoft и там тоже корнем проблемы была оптимизация.
Но зато при этом выдаётся правильный результат, на маленьких числах, по крайней мере :)
Я потому и говорю, что не уверен, будет ли работать. Как я понимаю, при преобразовании (int)foo лишние 8 бит отрезаются? Как это влияет на положительность числа?
Потсаны не шарят. Сравнение а с а сводится к сравнению (а-а) с нулём, посему евляется частным случаем сравнения с нулём. А вот сравнение а с нулём, разделённое на некоторое Епсилон, является частным случаем сравнения (бесконечно) большого с нулём, при достаточно малом Епсилон. Ежу понятно что нужно быть полным лохъом, чтобы облажаться при сравнении (бесконечно) большого с нулём, вестимо.
Хм, я правда нагрубил? В таком случае прошу извинить, ибо я не имел цели оскорбить или обидеть кого-либо. Насчёт понтоваться - не думаю что это хорошая идея не делать этого, а также это не запрещено правилами. Поэтому я не считаю возможным, нужным или полезным отказаться от этого интересного и увлекательного занятия. Однако если модераторы решат что мои действия заслуживают наказания, приму назначенное мне наказание с честью и пребуду в великой печали до истечения его срока.
кстати 0 это вообще круто,
как-то давно, в течении трёх дней искали ашипку "деления на 0",
оказалось, что некоторые триг. функции могут возвращать -0,
а в коде кто-то решил 'пооптимизировать' видимо и было условие
типа if (sign(x))..
ко всему на ia64 gdb отказывался показывать знак перед 0,
наверное считал что 0 он и в африке 0 :)