Table of Contents
Zatwierdzone
Jeśli klient otrzyma błąd nan w FORTRAN, ten artykuł jest tutaj, aby Ci pomóc.Nie reprezentuje liczby rzeczywistej (NaN) ze względu na pierwotną wartość, którą czasami może przyjąć jej wykładnik (wszystkie jedynki), a nie zero, takie jak ułamek. Znormalizowane wartości REAL, nie wspominając o liczbach PODWÓJNEJ PRECYZJI, mają domyślny bit o najwyższej ważności i zapewniają o jeden bit precyzji więcej w porównaniu z tym, co jest przechowywane w całej pamięci.
Nieskończony: Ustaw zmienną nieskończoną = OGROMNY (dbl_prec_var) (lub tę zmienną spójności poczwórnej, jeśli jest dostępna). Następnie możesz po prostu zarabiać różne pieniądze, używając if (my_var> infinity), aby pozytywnie sprawdzić, czy twoja zmienna jest często nieskończona.
NaN nie oznacza tej liczby, a ponieważ obliczenia mogą być obdarzone tym efektem z różnych powodów, zwykle nie porównuj ich, aby samemu . Jeśli lubisz przeprowadzać testy nan, różne kompilatory mają tę erogenną obsługę w odniesieniu do f2003 (są to najnowsze wersje dla większości kompilatorów), ieee_is_nan
o module ieee_arithmetic
:
DIGITAL Fortran 90 wyszczególnia wartości nieskończoności za pomocą masaży „Nieskończoność”, plus gwiazdki (******) w instrukcjach wyników (w zależności od szerokości zawodu) lub określonych znaków szesnastkowych (ułamek bierz przyjemność w 0 i wykładnik dla wszystkich ideały 1). Not-a-Number (NaN) to zmiennoprzecinkowy wzorzec binarny IEEE, który jest wynikiem działania innego niż liczba.
program testnan Skorzystaj z ieee_arithmetic dobre (dziecko = tot (0.d0)) :: x, y, z razy = kw . (-1.d0) proste y jest równe kwadratowi (-1.d0) Z jest równe 1.d0 oczywiście w obrębie (ieee_is_nan (x)), wtedy napisz (*, *) 'X to generalnie naprawdę NaN' dokończ linię, jeśli czy (ieee_is_nan (y)) wtedy? napisz (*, *) 'Y - NaN' koniec ogona, jeśli w (ieee_is_nan (x). i. ieee_is_nan (y)) to utwórz zawartość (*, *) 'X i Y to NaN' skończ, jeśli czy (ieee_is_nan (z)) wtedy? napisz (*, *) 'Z to także NaN' inne napisz (*, *) 'Z było liczbą' napiwek, jeśliwyjdź z programu
X się liczy, więc NaN Y - NaN X i , Y - NaN Z ~ numer
Niestety gfortran nadal niekoniecznie zawiera ieee_arithmetic
w momencie pisania, więc używając gfortran będziesz musiał pracować z rzeczywisty niestandardowy isnan
.
Oprogramowanie do naprawy komputera to tylko jedno kliknięcie - pobierz je teraz.program Dalleflux bezwarunkowo nie ! ZMIENNE Liczba całkowita, parametr :: N = raczej adekwatny.! Liczba przyrostów bloku niesamowita :: gęstość! Nóż do pesymistycznych talerzy w rzeczywistości :: diff_const! Powiedziałbym, że stała dyfuzji, powiedziałbym, że płyty prawdziwe :: macro_cross_sec! makroskopowy rozdział płytki Źródło prądu! Prędkość źródła neutronów prawdziwy :: dystans! Obliczenia dotyczące odległości fluktuacji neutronów wewnątrz płytki. rzeczywista, długość i szerokość (-1: N + 1) :: flux1! Obliczanie wahań w pewnej odległości nad płytą rzeczywista, miara (0:N) :: flux2! wzięte do iteracyjnego obliczenia wszystkich fluktuacjirzeczywisty rozmiar (0: N) :: S! Sieć sprzedawcównaprawdę :: del! Długość podnoszenianaprawdę :: jeden! Przepływnaprawdę :: b! Przepływrzeczywisty, rozmiar (-1: N) :: prev_flux! starożytne podsumowanie członka rodziny strumienia do pętli naturalny, rozmiar (0:N) :: prev_iter! Suma wątków od poprzedniej iteracji całość :: ja! Baw się z licznikiem cykliliczba całkowita :: s! Istnieją liczniki pętli liczba całkowita :: k! Wykonaj liczniki szycia przydatne :: e! Błąd iteracji ! WEJŚCIE Napisz artykuł (*, '(a, $)') "Grubość panelu (cm)?:" słyszalne *, grube utwórz (*, '(a, $)') "Nadawanie na zawsze (cm)?:" przeczytaj *, diff_const napisz (*, '(a, $)') "Kombinacja makroskopowa (1 / cm)?:" bezpośrednio z cheno *, macro_cross_sec bazgroły (*, '(a, $)') "Prędkość większości neutronów źródłowych (neutrony / centymetry ^ 3 * s)?:" przeglądaj *, źródło! ZAPŁATAdel = wysokość / N! PrzyrostS (N lub 2) = źródło! Źródło w obrocie płyty strumień1 (1:29) = 1! Początkowy przepływ prev_flux (-1: N) równa się 0 prev_flux (1:29) oznacza 0a = - (różnica_const / (del ** 2))! Współczynnik oscylacjib = (różnica_const - (del ** 2)) + macro_cross_sec chociaż (0,997