2017-04-27 5 views
0

Ich lerne Fortran (mit dem Fortran 2008 Standard) und möchte meine ganzzahlige Teilpräzision und Dezimalstellengenauigkeit für eine echte Variable unabhängig einstellen. Wie mache ich das?Wie werden Integer und Bruchgenauigkeit unabhängig voneinander eingestellt?

Zum Beispiel lassen Sie uns sagen, dass ich eine echte Variable deklarieren möchten, die als 3 und Bruchteil Präzisions ganzzahlige Teil Präzision hat als 8.

Ein Beispiel Nummer in dieser obigen Beschreibung 123,12345678 sagen würde, aber 1234.1234567 würde die gegebene Anforderung nicht erfüllen.

+0

Für echte Zahlen definiert Fortran nur Fließkommazahlen. In einem solchen Modell ist mir nicht klar, was Sie meinen, wenn Sie eine unabhängige Genauigkeit für ganzzahlige und gebrochene Teile haben. Kannst du mit einem Beispiel klären? [Sie können natürlich nicht-intrinsische Dinge auf bestimmte Arten verwenden.] – francescalus

+0

Meinst du Dezimalteil und Exponentialteil (anstelle des ganzzahligen Teils)? – SteveES

+0

@francescalus, ich habe ein Beispiel in die Beschreibung eingefügt – anuvaramban

Antwort

1

Fortran reelle Zahlen sind FLOATING Punktnummern. Fließkommazahlen speichern nicht den ganzzahligen Teil und den Dezimalteil. Sie speichern einen Signifikanten und einen Exponenten.

Sehen Sie, wie Fließkommazahlen funktionieren http://en.wikipedia.org/wiki/Floating-point_arithmetic Es gibt normalerweise ein Gleitkommaformat, das Ihre CPU verwendet, und Sie können nicht einfach ein anderes wählen.

Was Sie fragen, ist mehr wie die FIXED Punktarithmetik, aber moderne CPUs und Fortran unterstützen es nativ nicht. https://en.wikipedia.org/wiki/Fixed-point_arithmetic

Sie können sie in verschiedenen Bibliotheken (vielleicht auch Fortran) oder Sprachen verwenden, aber sie sind nicht native REAL. Sie sind wahrscheinlich in Software implementiert, nicht direkt in der CPU und sind langsamer.

+0

Vielen Dank für Ihre Antwort, ich habe eine Follow-up: so im Moment verwende ich zurückgegebenen Wert von selected_real_kind (16), um Genauigkeit mit der Art Argument, aber wenn ich das Ergebnis der Berechnungen auszudrucken, scheint es zu verwenden als wenn Festkommaarithmetik. Zum Beispiel: seit ich selected_real_kind (16), 3.14 ** 3.14 gibt 36.3378388801746960712 während 10.12 ** 10.12 ergibt 14873966072.8729692074 wobei ich die reale Variable "ar" auf 3.14 und 10.12 in konsequenten Läufen des Programms, das einfach tut * * ar – anuvaramban

+1

Das ist ein Missverständnis. Und seien Sie vorsichtig, '10.12' ist eine einzige (Standard) Genauigkeitsrealkonstante, es sei denn, Sie deklarieren sie mit einer bestimmten Art. Siehe http://stackoverflow.com/questions/6146005/is-there-a-better-double-precision-assignment-in-fortran-90 –

+0

@anuvaramban Warum denkst du, dass das Festkommaarithmetik ist? – SteveES

Verwandte Themen