Πολλαπλασιασμός αλά ρωσικα

Ξεκίνησε από theoni, 19 Σεπ 2018, 09:02:57 ΜΜ

« προηγούμενο - επόμενο »

theoni

Καλησπέρα και καλή σχολική χρονιά. Θα ηθελα να ρωτήσω αν ο πολ/σμος αλά ρωσικά χρησιμοποιείται μόνο σε ακεραιους θετικούς όπως γράφει το βιβλίο ή μπορεί να χρησιμοποιηθεί σε αρνητικούς αριθμούς και σε πραγματικούς???? Και αν το αλλαγές πρέπει να κάνουμε???

gpapargi

Και εμείς οι άνθρωποι όταν κάνουμε πολλαπλασιασμό αρνητικών και πραγματικών ουσιαστικά αναγόμαστε σε πολλαπλασιασμό θετικών ακεραίων. Στους αρνητικούς έχουμε τακτοποιήσει χωριστά το πρόσημο ενώ στους πραγματικούς πολλαπλασιάζουμε σαν να είναι ακέραιοι και μετά απλώς μετράμε δεκαδικά ψηφία. Άρα γίνεται.

theoni

Η ολισθηση χρησιμοποιείται στους πραγματικούς αριθμούς?????

gpapargi

Δεν είμαι σίγουρος ότι καταλαβαίνω την ερώτηση. Κάθε φορά που κάνεις πολλαπλασιασμό βάζοντας μηδενικά στο τέλος ή κουνώντας υποδιαστολή κάνεις ολίσθηση. Εμείς οι άνθρωποι που χρησιμοποιούμε το δεκαδικό σύστημα αρίθμησης το κάνουμε κάθε φορά που πολλαπλασιάζουμε με το 10. Η μηχανή που χρησιμοποιεί δυαδικό το κάνει κάθε φορά που πολλαπλασιάζει με το 2. Δηλαδή ολίσθηση αριστερά κατά μια θέση σημαίνει πολλαπλασιασμός με τη βάση του συστήματος αρίθμησης. Δεν έχει να κάνει με ακέραιους και πραγματικούς αυτό. Αλλά δεν είμαι σίγουρος ότι έχω καταλάβει το ερώτημα.

theoni

Στο βοήθημα που χρησιμοποιώ υπάρχει ένα σωστό λάθος που λέει η ολισθηση ισχυει και στους δεκαδικους αριθμούς??? Η απάντηση που δίνει το βοήθημα είναι λαθος

pgrontas

Παράθεση από: theoni στις 20 Σεπ 2018, 02:49:35 ΜΜ
Στο βοήθημα που χρησιμοποιώ υπάρχει ένα σωστό λάθος που λέει η ολισθηση ισχυει και στους δεκαδικους αριθμούς??? Η απάντηση που δίνει το βοήθημα είναι λαθος

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

Με δεδομένο ότι πραγματικοί με την έννοια του R στον υπολογιστή δεν υπάρχουν, αν τους σκεφτούμε ως δεκαδικούς με αναπαράσταση floating point  δεν  γίνεται ολίσθηση (από την άλλη έχω σκουριάσει και λίγο και δεν κόβω το κεφάλι μου). Αν τους σκεφτούμε όμως πάνω κάτω ως ρητούς όπου τα bits είναι το 'διπλα-δίπλα' σε συγκεκριμένο χώρο - απλοποίηση καθόλα αποδεκτή για το μάθημα κατά τη γνώμη μου- τότε μπορεί να οριστεί.

Τέτοια προβλήματα προκύπτουν επειδή το μάθημα δεν έχει ορίσει σαφώς ένα αφαιρετικό υπολογιστικό μοντέλο αλλά και επειδή οι μαθητές δεν διδάσκονται καθόλου αρχιτεκτονική ώστε να μπορεί να χρησιμοποιηθεί το κανονικό.
Programs must be written for people to read, and only incidentally for machines to execute - Harold Abelson

gpapargi

Τώρα νομίζω ότι καταλαβαίνω το ερώτημα. Τα όσα έγραψα παραπάνω ισχύουν για τους αριθμούς στα μαθηματικά. ολίσθηση είναι το να τους "τσουλήσεις" όλους κάποιες θέσεις δίπλα και αυτό ισοδυναμεί με πολλαπλασιασμό με τη βάση του συστήματος αρίθμησης.
Για τον υπολογιστή έχει νόημα αν ο αριθμός είναι ακέραιος ή πραγματικός με αναπαράσταση σταθερής υποδιαστολής. Αν έχει αναπαράσταση κινητής υποδιαστολής (floating point) και κάνεις ολίσθηση, ο αριθμός που θα προκύψει δε θα είναι το αποτέλεσμα του πολλαπλασιασμού με τη βάση του συστήματος αρίθμησης γι αυτό και δεν έχει νόημα η ολίσθηση στον πραγματικό κινητής υποδιαστολής. Αν γινόταν θα μας ήταν άχρηστη σε σχέση με το λόγο που τη θέλουμε. Συμφωνώ δηλαδή με τον Παναγιώτη.
Η ερώτηση αυτή ξεφεύγει από το πλαίσιο του μαθήματος γιατί δε διδάσκονται τα παιδιά την αναπαράσταση των πραγματικών μέσα στη μηχανή.

Καρκαμάνης Γεώργιος

Παράθεση από: theoni στις 20 Σεπ 2018, 12:51:21 ΜΜ
Η ολισθηση χρησιμοποιείται στους πραγματικούς αριθμούς?????

Νομίζω ότι  χάνεται το νόημα για το τι πρέπει να διδαχτεί στα παιδιά για την ολίσθηση. Τέτοιου είδους διατυπώσεις δημιουργούν σύγχυση στους μαθητές και φτάνουμε στο αντίθετο αποτέλεσμα από το επιθυμητό. Καλό είναι να μην "πλατιάζουμε" σε πράγματα που είναι εκτός μαθήματος.
 

bugman

η ολίσθηση σε πραγματικό γίνεται με πολλαπλασιασμό επί 10 ή με διαίρεση δια δέκα. Η ολίσθηση είναι νοητή δηλαδή πχ το 1234 αν γίνει 12340 τότε έχουμε ολίσθηση, κατά ένα ψηφίο του δεκαδικού συστήματος. Όταν έχουμε έναν ακέραιο, τότε η δυαδική ολίσθηση κάνει πολλαπλασιασμό επί δύο, εφόσον έχουμε δυαδική αναπαράσταση, εφόσον ο ακέραιος είναι χωρίς πρόσημο. Αν είναι με πρόσημο τότε η ολίσθηση κάνει ζημιά!

Η πιο ωραία αναπαράσταση για την ολίσθηση είναι στον συσσωρευτή ή accumulator του επεξεργαστή όπου υπάρχει εντολή για ολίσθηση, όταν γίνεται ολίσθηση προς το πιο σημαντικό ψηφίο (bit) τότε αυτό που χάνεται πάει σε ένα flag ή σημαία, με όνομα curry, και μπορεί κανείς να το εκμεταλλευτεί, ελέγχοντας την θέση του (αληθές ή ψευδές) ώστε να επιτύχει ή όχι επανάληψη εντολών.
η εντολή λέγεται shift (μετατόπιστα, τα ψηφία, bit) και όταν αυτό που βγαίνει μπαίνει από την άλλη πλευρά λέγεται Rotate, περίστρεπτα τα ψηφία, bit.
https://en.wikibooks.org/wiki/X86_Assembly/Shift_and_Rotate
ο αλγόριθμος CRC-32 χρησιμοποιεί τις ολισθήσεις μαζί με την Xor για να βγάλει έναν τελικό αριθμό με τον οποίο ελέγχει αν μια ομάδα δυαδικών ψηφίων έχει σφάλμα ή όχι.
http://www.rosettacode.org/wiki/CRC-32