Nemrégiben furcsa problémával találkoztam a FORTRAN95-tel. Az X és Y változókat az alábbiak szerint inicializáltam:
X=1.0 Y=0.1
Később összeadom őket, és kinyomtatom az eredményt:
1.10000000149012
A változók vizsgálata után úgy tűnik, mintha a 0,1 nincs kettős pontossággal, teljes pontossággal ábrázolva. Van-e valamilyen módja ennek elkerülésére?
Válasz
Ennek másik módja, ha először kifejezetten megadja a kívánt pontosságot a változóban a SELECTED_REAL_KIND belső használatával, majd ezt használja a változók meghatározására és inicializálására. :
INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(15) REAL(dp) :: x x = 1.0_dp
Szép előnye ennek az elvégzésének, hogy tárolhatja a dp
definíciót modult, majd USE
azt a modult, ahol szükséges. Most, ha valaha meg akarja változtatni a pontosságot csak a dp
definícióját kell megváltoztatnia ezen a helyen, ahelyett, hogy az összes D0
a változó inicializálásának vége. (Ezért is ajánlom, hogy ne használja a 1.0D-1
szintaxist az Y meghatározásához a javasolt módon. Működik, de megnehezíti a jövőben az összes példány megtalálását és módosítását.)
Ez az oldal a Fortran Wiki oldalán jó kiegészítő információkat nyújt a SELECTED_REAL_KIND
.
Megjegyzések
Válasz
A változókat kettős pontosságúnak nyilvánította, de inicializálta egyetlen pontosságú érték.
Írhatta:
X=1.0d0 Y=1.0d-1
Megjegyzések
- Úgy gondolom, hogy az alábbi bejegyzésben leírt 1.0_dp módszert kell használni.
- Másodszor @ OndřejČert í k ' s megjegyzés – Barron ' válasza a legjobb.
_dp
séma használatának fő oka az, hogy a pontosság egyértelmű legyen hordozható módon definiálva.