Διαδρομές
/
Elixir
Elixir
/
Ύλη
/
Αριθμοί κινητής υποδιαστολής
Αρ

Αριθμοί κινητής υποδιαστολής σε Elixir

8 ασκήσεις

Σχετικά με την έννοια Αριθμοί κινητής υποδιαστολής

Στην Elixir υπάρχουν δύο διαφορετικά είδη αριθμών: οι ακέραιοι και οι δεκαδικοί αριθμοί.

Οι δεκαδικοί αριθμοί είναι αριθμοί με ένα ή περισσότερα ψηφία μετά την υποδιαστολή. Χρησιμοποιούν τη μορφή κινητής υποδιαστολής διπλής ακρίβειας 64 bit.

float = 3.45
# => 3.45

Η Elixir υποστηρίζει επίσης την επιστημονική σημειογραφία για δεκαδικούς αριθμούς.

1.25e-2
# => 0.0125

Σφάλματα στρογγυλοποίησης

Οι δεκαδικοί αριθμοί είναι διαβόητοι για τα σφάλματα στρογγυλοποίησης.

0.1 + 0.2
# => 0.30000000000000004

Ωστόσο, αυτού του είδους τα σφάλματα δεν είναι αποκλειστικότητα της Elixir. Συμβαίνουν σε όλες τις γλώσσες προγραμματισμού. Αυτό συμβαίνει επειδή όλα τα δεδομένα στους υπολογιστές μας αποθηκεύονται και επεξεργάζονται ως δυαδικός κώδικας. Στο δυαδικό σύστημα, μόνο τα κλάσματα των οποίων ο παρονομαστής μπορεί να εκφραστεί ως 2^n (π.χ. 1/4, 3/8, 5/16) μπορούν να εκφραστούν με ακρίβεια. Τα υπόλοιπα κλάσματα εκφράζονται ως εκτιμήσεις.

# 3/4
Float.ratio(0.75)
# => {3, 4}

# 3/5
Float.ratio(0.6)
# => {5404319552844595, 9007199254740992}

Μπορείς να μάθεις περισσότερα για αυτό το πρόβλημα στο 0.30000000000000004.com. Η σελίδα Float Toy έχει μια ωραία, γραφική εξήγηση του πώς τα bits ενός αριθμού κινητής υποδιαστολής μετατρέπονται σε μια πραγματική τιμή κινητής υποδιαστολής.

Σύγκριση

Οι ακέραιοι και οι δεκαδικοί αριθμοί μπορούν να θεωρηθούν ίσοι (==) αν έχουν την ίδια τιμή. Ωστόσο, επειδή είναι διαφορετικοί τύποι, δεν είναι ποτέ αυστηρά ίσοι (===).

1 == 1.0
# => true

1 === 1.0
# => false

Μετατροπή

Οι ακέραιοι και οι δεκαδικοί αριθμοί μπορούν να αναμιχθούν σε μία μόνο αριθμητική παράσταση. Η χρήση ενός δεκαδικού αριθμού σε μια παράσταση εξασφαλίζει ότι το αποτέλεσμα θα είναι κι αυτό δεκαδικός αριθμός.

2 * 3
# => 6

2 * 3.0
# => 6.0

Οι δεκαδικοί αριθμοί μπορούν να στρογγυλοποιηθούν (round), να στρογγυλοποιηθούν προς τα πάνω (ceil) ή να στρογγυλοποιηθούν προς τα κάτω (floor).

Για να στρογγυλοποιήσεις έναν δεκαδικό αριθμό σε δεκαδικό αριθμό, χρησιμοποίησε συναρτήσεις από το module Float (Float.round, Float.ceil, Float.floor). Για να πάρεις ακέραιο αντ' αυτού, χρησιμοποίησε συναρτήσεις από το module Kernel (round, ceil, floor).

Μια άλλη μέθοδος για να μετατρέψεις έναν δεκαδικό αριθμό σε ακέραιο είναι να κόψεις το δεκαδικό του μέρος με τη συνάρτηση trunc.

Float.ceil(5.2)
# => 6.0

ceil(5.2)
# => 6

trunc(5.2)
# => 5
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα

Μάθε την έννοια Αριθμοί κινητής υποδιαστολής

Η εξάσκηση είναι κλειδωμένη

Ξεκλείδωσε 4 ακόμη ασκήσεις για να εξασκηθείς στην έννοια Αριθμοί κινητής υποδιαστολής