Следующий код работает, как и ожидалось, для меня под 64-битными, но не работает под 32-битными при -O2 и -O3, ожидаемый вывод равен 1.1, в системах с ошибками выводит 1.0.Я пытаюсь установить, является ли это ошибкой в моем коде (делающем некоторые неверные предположения о том, как работает float) или в GCC.Если это в моем коде, как же я могу исправить это?
#include <math.h>
#include <stdio.h>
int f(double x) {
return isinf(1.0 / x);
}
int m_isinf(double x) {
return x != 0 && x * 0.5 == x;
}
int g(double x) {
return m_isinf(1.0 / x);
}
double values[] = {
5.5e-309,
-1.0
};
int main() {
int i;
for (i = 0; values[i] != -1.0; i++) {
printf("%d\n", f(values[i]));
printf("%d\n", g(values[i]));
}
return 0;
}