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

  • Ez ' igaz, ez legyen a szokásos megközelítés.
  • És milyen gyakran kell az embereknek vakon változtatniuk a programjuk pontosságán, anélkül, hogy egyébként eljárás és tesztelés útján eljárnának? A _dp séma használatának fő oka az, hogy a pontosság egyértelmű legyen hordozható módon definiálva.

Válasz

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük