Δεκαδικός

Δεκαδικός

Μέτριο

Οδηγίες

Υλοποίησε έναν τύπο Decimal αυθαίρετης ακρίβειας.

Οι αριθμοί κινητής υποδιαστολής είναι η πιο συνηθισμένη αναπαράσταση των μη ακέραιων πραγματικών αριθμών στην πληροφορική και αποτελούν ένα κοινό πρότυπο που ορίζεται από το IEEE 754. Είναι πολύ ευέλικτοι και ευπροσάρμοστοι, αλλά έχουν όντως κάποιους περιορισμούς. Είναι γνωστό ότι, στην αριθμητική κινητής υποδιαστολής, 0.1 + 0.2 != 0.3.

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

Παρά το γεγονός ότι το Decimal είναι ένας προσαρμοσμένος τύπος, θα πρέπει να μπορούμε να τα αντιμετωπίζουμε ως αριθμούς: οι τελεστές ==, <, >, +, - και * θα πρέπει να λειτουργούν όλοι όπως αναμένεται σε τιμές Decimal. Για λόγους ευκολίας, δεν απαιτείται να υλοποιήσεις τη διαίρεση, καθώς η διαίρεση αυθαίρετης ακρίβειας μπορεί πολύ γρήγορα να ξεφύγει. (Πώς αναπαριστάς το 1/3 αυθαίρετης ακρίβειας;)

Στη Rust, ο τρόπος για να έχεις αυτές τις πράξεις σε προσαρμοσμένους τύπους είναι να υλοποιήσεις τα σχετικά traits για αυτόν. Συγκεκριμένα, θα χρειαστεί να υλοποιήσεις τουλάχιστον τα PartialEq, PartialOrd, Add, Sub και Mul. Αυστηρά μιλώντας, δεδομένου ότι οι δεκαδικοί αριθμοί σχηματίζουν μια ολική διάταξη, θα πρέπει επίσης να υλοποιήσεις τα Eq και Ord, αν και αυτά τα traits δεν ελέγχονται από αυτά τα tests.

Θα ήταν πολύ εύκολο να υλοποιήσεις αυτή την άσκηση χρησιμοποιώντας το crate bigdecimal. Μην το κάνεις αυτό. Υλοποίησέ το μόνος σου.


Πηγή

Peter Goodspeed-Niklaus
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Rust Exercism

Έτοιμος να ξεκινήσεις την άσκηση Δεκαδικός;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Rust με 99 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.