Czy jest możliwe, aby isnan () działał w gfortran -O3 -ffast-math?
Chciałbym skompilować program z gfortranem i-O3 -ffast-math
włączone, ponieważ daje to dobry wzrost wydajności. Byłem raczej zdezorientowany, ten gfortranisnan()
złapałem niektóre z nich, ale nie wszystkie. Po przeczytaniu
Sprawdzanie, czy double (lub float) to NaN w C ++
jak zrobić przenośną funkcję isnan / isinf
Negatywny NaN nie jest NaN?
Mam wrażenie, że ludzie są w stanie sprawdzić NaN w C za pomocą bicia bitów, nawet przy włączonej szybkiej matematyce. Jednak to mnie zastanawia od szybkiej matematyki
może powodować nieprawidłowe wyniki dla programów, które zależą od dokładnej implementacji reguł / specyfikacji IEEE lub ISO dla funkcji matematycznych.
Według strony podręcznika użytkownika gcc 4.7.2. Skąd wiesz, który bit sprawdzić, jeśli liczby nie są reprezentowane zgodnie ze standardem IEEE? A jeśli to wiesz, jak byś to zaimplementował w Fortran 95/03/08?
Nie zawracaj sobie głowy publikowaniem postów(x \= x)
lub podobne rozwiązania, które zależą od reguł IEEE. Dają taki sam wynik jakisnan()
. Jestem również świadomy-ffpe-trap=invalid,zero,overflow
, ale nie chcę zatrzymywać programu. Jeśli to pomoże, mój system operacyjny jest 64-bitowy LinuxMint 14. Jeśli nie jest to możliwe w Fortran, fajne byłoby również wodoodporne rozwiązanie C.