APPLE πτώση διαίρεση

[Παύλος Curtis] πάνω σε Segger έχει μια ενδιαφέρουσα σειρά από θέσεις blog για τον υπολογισμό της διαίρεσης. Αυτό χρησιμοποιείται για να είναι ένα θέμα θερμότερος, αλλά σήμερα πολλοί υπολογιστές ή γλώσσες προγραμματισμού έχουν υποστήριξη για τον πολλαπλασιασμό και τη διαίρεση ενσωματωμένο. αλλά μερικοί επεξεργαστές διαθέτουν τις οδηγίες και μια βιβλιοθήκη για να το κάνει μπορεί να είναι λιγότερο από το ιδανικό. ξέροντας πώς να κατασκευάζουν τα δικά σας μπορεί να σας επιτρέψει να βελτιστοποιήσετε για την ταχύτητα ή χώρο. Τα σημερινά εξώφυλλα δόση χρησιμοποιώντας τον αλγόριθμο του Νεύτωνα για να κάνουν διαίρεση.

Ο Steve Martin είχε ένα διάσημο κομμάτι για το πώς να γίνει εκατομμυριούχος και ποτέ δεν πληρώνουν φόρο. Ξεκίνησε λέγοντας, «Πρώτη … να πάρει ένα εκατομμύριο δολάρια. Τότε …»Αυτή η μέθοδος είναι λίγο σαν αυτό δεδομένου ότι θα πρέπει πρώτα να γνωρίζουμε πώς να πολλαπλασιάζονται για να μπορέσετε να διαιρέσετε. Η βασική αρχή είναι διττός: η μέθοδος του Νεύτωνα επιτρέπουν να βελτιώσετε μια εκτίμηση της αμοιβαιότητας με διαδοχικές πολλαπλασιασμούς και μετά τον πολλαπλασιασμό ενός αριθμού αμοιβαία είναι το ίδιο με τη διαίρεση. Με άλλα λόγια, αν θα πρέπει να χάσμα 34 από 6, θα μπορούσε να ξαναγράψει 34/6 έως 34 * 1/6 και η απάντηση είναι η ίδια.

προσέγγιση του Νεύτωνα για reciprocals σας επιτρέπει να πάρετε μια εικασία την απάντηση και στη συνέχεια να βελτιώσετε την μέσα από μια σειρά πολλαπλασιασμούς. Κάθε πολλαπλασιασμό δημιουργεί μεγαλύτερη ακρίβεια. Μπορείτε να χρησιμοποιήσετε αυτό για να εκτελέσει ένα κλασικό ταχύτητα / χώρο trade-off. Για παράδειγμα, ας υποθέσουμε ότι θέλετε να βρείτε το αντίστροφο του ενός byte (προφανώς ένα σταθερό σημείο byte). Ένα look-up πίνακα των 256 στοιχείων θα παρέχει τέλεια ακρίβεια και θα είναι πολύ γρήγορη. Δεν υπάρχουν άλλα μαθηματικά είναι απαραίτητη. αλλά τι γίνεται με 32 bits; τώρα ο πίνακας είναι ακριβώς πάρα πολύ μεγάλο. αλλά θα μπορούσε να κοιτάζω προς τα πάνω, δηλαδή, τα πρώτα 8 bits του αριθμού 32-bit. Ή περισσότερο. Ή λιγότερο. Εξαρτάται από το τι είναι σημαντικό για εσάς.

Έτσι τώρα έχετε μια κακή εκτίμηση των αμοιβαίων σας. Σερ Ισαάκ μπορεί να το κάνει καλύτερα. Για κάποιο αριθμό ένα, παίρνετε εκτίμηση σας (x) και πολλαπλασιάζονται μαζί. Αφαιρέστε τον αριθμό 2 και έχετε έναν παράγοντα για να πολλαπλασιάσει παλιά εκτίμηση σας για να πάρετε μια νέα εκτίμηση. Παράκαμψη μπροστά, είναι σαφές αν η εκτίμησή σας είχε δίκιο, ο πολλαπλασιασμός θα σας δώσει 1, η οποία δεν θα αλλάξει την παλιά εκτίμηση καθόλου. Εάν η εκτίμηση είναι μακριά, θα πάρετε ένα συντελεστή προσαύξησης.

Ως έναν τύπο που μοιάζει με αυτό:

x = x * (2-α * x)?
Έτσι, αν αποφασίσετε το αντίστροφο του 22 μπορεί να είναι .02, το πρώτο πέρασμα θα σας δώσει:

0,02 * (2-22 * 0,02) = .0312

.0312 * (2-22 * .0312) = .0410

.0410 * (2-22 * .0410) = 0,0450
Η σωστή απάντηση είναι περιοδικός αριθμός 0.0454545 και αν συνεχίσετε, θα φτάσουμε εκεί.

Φυσικά, τότε θα πρέπει να πολλαπλασιαστούν για μια ακόμη φορά να κάνει τη διαίρεση.

Μας άρεσε ότι η θέση έχει εφαρμογή σταθερού σημείου και στη συνέχεια εξετάζει το προκύπτον κωδικό συναρμολόγησης ARM, RISC-V, και dsPIC30. Αξίζει να το διαβάσετε.

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