Σελίδα 1 από 1

Βοήθεια στη Fortran

Δημοσιεύτηκε: Κυρ Μαρ 09, 2014 1:24 am
από Σ. Διονύσης
Έφτιαξα ένα απλό πρόγραμμα σε Fortran 90/95 το οποίο βρίσκει το μεγαλύτερο στοιχείο ενός συνόλου:

program maximum_value_of_set
integer n
real b, maxvalue
real, allocatable, dimension (:) :: A
print *, "Give the dimension of the vector:"
read *, n
allocate (A(n))
do i=1,n
read *, A(i)
enddo
b= maxvalue (n,A)
print *,b
end


real function maxvalue (n,A)
integer, intent (in) :: n
real, intent (in), dimension (n) :: A
integer i
maxvalue=A(1)
do i=2,n
if (A(i)>maxvalue) maxvalue=A(i)
enddo
end function

Όταν το τρέχω όμως και βάζω διάφορες τιμές π.χ 5, 7.5, 3, 1, 7,51 αντί να βγάλει το 7,51 μου βγάζει 7,51000023
Δηλαδή σε κάθε αποτέλεσμα προσθέτει το +0.00000023
Από τι μπορεί να οφείλεται αυτό. Μήπως είναι το format;
Αν μπορεί να βοηθήσει κάποιος θα το εκτιμούσα πολύ.

Re: Βοήθεια στη Fortran

Δημοσιεύτηκε: Κυρ Μαρ 09, 2014 2:23 pm
από nightchild
Διονύση αυτό το +0.0000023 στο βγάζει οτι νούμερα και να δώσεις στην αρχή ή μονο για τα συγκεκριμμένα;

Ρωτάω γιατι ένα τέτοιο αποτέλεσμα μπορεί να οφείλεται σε σφάλμα αναπαράστασης του 7.51
οπότε το μηχανημα τον προσεγγίζει απο τον αριθμό που σου εκτυπώνει.

Αν δεν θες να εμφανίζεται μπορεις αντι της print να χρησιμοποιήσεις την print ''(f5.3)'', μεταβλητή
η οποία θα εμφανίσει τον αριθμό με 1 ψηφίο πριν την υποδιαστολή και 3 μετά την υποδιαστολή

Re: Βοήθεια στη Fortran

Δημοσιεύτηκε: Κυρ Μαρ 09, 2014 3:05 pm
από Σ. Διονύσης
Το κάνει οποιοδήποτε αριθμούς και να βάλω. Αυτό που λές είναι το format.

Το θέμα είναι ότι αν κάνεις το συγκεκριμένο format που λες ή για κάποιο συγκεκριμένο αριθμό δεκαδικών, π.χ:

b= maxvalue (n,A)
print '(F5.3)',b
end

ή όπως μου αρέσει να το γράφω για να διαβάζεται καλύτερα:

b= maxvalue (n,A)
print 1,b
1 format (f5.3)
end

τότε θα εμφανίζονται μόνο 3 δεκαδικά ψηφία. Έτσι αν θέλω ας πουμε να συγκρίνω αριθμούς με 4 δεκαδικά ψηφία π.χ τους αριθμούς: 7.5101 και 7.5102 θα έχουμε παράδοξο και θα βγάλει αποτέλεσμα 7.510

Επίσης, τώρα παρατηρώ ότι δε προσθέτει πάντα το συγκεκριμένο αριθμό που γράφω παραπάνω, αλλά μια φορά μου αφαίρεσε -0.00000011
Μήπως είναι ο compiler;