Ακρίβεια υπολογισμού του LibreOffice

Πρόβλημα εγγενούς ακρίβειας

Το LibreOffice Calc, όπως και τα περισσότερα άλλα λογισμικά υπολογιστικών φύλλων, χρησιμοποιεί δυνατότητες μαθηματικών κινητής υποδιαστολής που είναι διαθέσιμες στο υλικό. Δεδομένου ότι το μεγαλύτερο μέρος του σύγχρονου υλικού χρησιμοποιεί δυαδική αριθμητική κινητής υποδιαστολής με περιορισμένη ακρίβεια που ορίζεται στο πρότυπο IEEE 754, πολλοί δεκαδικοί αριθμοί - συμπεριλαμβανομένου του 0,1 - δεν μπορούν να αναπαρασταθούν με ακρίβεια στο LibreOffice Calc (το οποίο χρησιμοποιεί εσωτερικά αριθμούς διπλής ακρίβειας 64 bit).

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

Αυτό δεν είναι σφάλμα, αλλά είναι αναμενόμενο και επί του παρόντος αναπόφευκτο χωρίς τη χρήση πολύπλοκων υπολογισμών σε λογισμικό, το οποίο θα επιφέρει ακατάλληλες επιπτώσεις απόδοσης και, επομένως, δεν αμφισβητείται. Οι χρήστες πρέπει να το λάβουν υπόψη και να χρησιμοποιήσουν στρογγυλοποίηση και συγκρίσεις με τη μηχανή έψιλον (ή στρογγυλοποίηση μονάδας) όπως απαιτείται.

Παράδειγμα με αριθμούς:

A

1

31000.99

2

32000.12

3

=A1-A2


Αυτό θα έχει ως αποτέλεσμα -999,129999999997 στο A3, αντί για το αναμενόμενο -999,13 (ίσως χρειαστεί να αυξήσετε τα εμφανιζόμενα δεκαδικά ψηφία σε μορφή κελιού για να το δείτε).

Ένα παράδειγμα με ημερομηνίες και χρόνο:

Λόγω της ιδιαιτερότητας της αναπαράστασης χρόνου στο Calc, αυτό ισχύει επίσης για όλους τους υπολογισμούς που αφορούν χρόνους. Για παράδειγμα, τα κελιά A1 και A2 παρακάτω εμφανίζουν τα δεδομένα ημερομηνίας και χρόνου όπως έχουν εισαχθεί (σε μορφή ISO 8601):

A

1

2020-04-13 12:18:00

2

2020-04-13 12:08:00

3

=A1-A2


Το κελί A3 θα εμφανίσει 00:10:00 εάν εφαρμοστεί στο κελί η προεπιλεγμένη μορφοποίηση [ΩΩ]:ΛΛ:ΔΔ. Ωστόσο, το κελί A3 θα εμφανίσει 00:09:59.999999 αντί για το αναμενόμενο 00:10:00.000000 εάν μορφοποιηθεί χρησιμοποιώντας συμβολοσειρά μορφής [ΩΩ]:ΛΛ:ΔΔ.000000. Αυτό συμβαίνει παρά το γεγονός ότι χρησιμοποιήθηκαν μόνο ακέραιοι αριθμοί ωρών και λεπτών, επειδή εσωτερικά, οποιαδήποτε ώρα είναι κλάσμα της ημέρας, ενώ η 12:00 (μεσημέρι) αντιπροσωπεύεται ως 0,5.

Τα δεδομένα στο A1 αντιπροσωπεύονται εσωτερικά ως 43934,5125 και στο A2 ως 43934,5055555555591126903891563 (που δεν είναι ακριβής αναπαράσταση της εισαγόμενης ημερομηνίας, η οποία θα ήταν 43934,50555555555).

Η αφαίρεσή τους έχει ως αποτέλεσμα 0,00694444443287037, τιμή ελαφρώς μικρότερη από την αναμενόμενη 0,00694444444444..., που είναι 10 λεπτά.

Παρακαλούμε, υποστηρίξτε μας!