Αρχές Προγραμματισμού Συστήματα αρίθμησης

Αρχιτεκτονική Σύγχρονων επεξεργαστών

Οι περισσότεροι σύγχρονοι επεξεργαστές, όπως θα έχετε ακούσει είναι 32 bit. Τι εννοούμε όταν λέμε 32 bit; Αυτά τα 32 bit δηλώνουν το μέγεθος των καταχωρητών (registers) που διαθέτει ο επεξεργαστής. Οι καταχωρητές είναι μικρές μνήμες στις οποίες αποθηκεύουμε δεδομένα προσωρινά τα οποία χρησιμοποιεί ο επεξεργαστής. Αυτά τα δεδομένα μπορεί να είναι είτε αριθμοί είτε κείμενο είτε άλλα στοιχεία όπως διευθύνσεις μνήμης. Οπότε το μέγεθος των καταχωρητών περιορίζει τις μέγιστες τιμές σε αριθμούς, διευθύνσεις μνήμης. Για να καταλάβουμε τι σημαίνει αυτός ο περιορισμός πρέπει να δούμε πως αναπαριστούνται οι αριθμοί στον επεξεργαστή.

Η πιο απλή μορφή αριθμών είναι οι ακέραιοι (int). Έχοντας 32 μόνο bit είναι λογικό, σύμφωνα και με τα παραπάνω, ότι ο μεγαλύτερος θετικός ακέραιος θα είναι ο 2^32-1=4.294.967.295. Στην περίπτωση όμως που θέλουμε να έχουμε και αρνητικούς ακέραιους αυτό περιορίζεται στο μισό δηλαδή: ο μεγαλύτερος θετικός θα είναι ο 2^31-1=2147483647 και ο μικρότερος αρνητικός θα είναι ο -2^31=-2147483648. Αυτοί είναι ο προσημασμένοι ακέραιοι (signed int).

Αν τώρα θέλουμε να κάνουμε πράξεις με μεγαλύτερους ή μικρότερους ακεραίους υπάρχουν οι long και οι short int που έχουν αντίστοιχα 64 και 16 bit. Στην περίπτωση που τα 64 bit δεν είναι αρκετά ή πρέπει να κάνουμε πράξεις με μη ακέραιους αριθμούς υπάρχουν οι λεγόμενοι float. Σε αυτούς η αναπαράσταση του αριθμού είναι όπως η γνωστή scientific notation (πχ. 1.874Ε-9 που ισούται 1.874 10^-9). Αντίστοιχα στους δυαδικούς θα είναι της μορφής 0.100110Ε-1001. Παράδειγμα:

Ο αριθμός 0.75 θα είναι

0.7510 = 3/4 = 1/2 + 1/4 = 2-1 + 2-2 = 0.112 = 1.1 · 2-01

Ο επεξεργαστής τα 32 bit (single precision) τα χωρίζει ως εξής:
1 bit είναι το πρόσημο του αριθμού,
8 bit είναι ο εκθέτης (του 2)
23 bit είναι το κομμάτι μετά την υποδιαστολή.

Πάντα κάνουμε κανονικοποίηση έτσι ώστε να έχουμε ένα άσσο πριν την υποδιαστολή. Οπότε η μικρότερη δύναμη που μπορούμε να έχουμε για το κλασματικό κομμάτι είναι η

2-23 = 0.00000011920928955078

Αυτό σημαίνει ότι έναν δεκαδικό αριθμό μπορούμε να τον αναπαραστήσουμε με τόση ακρίβεια.
Πρακτικά αν αφαιρέσουμε από τον δεκαδικό την αντίστοιχη δυαδική αναπαράσταση το λάθος θα είναι μικρότερο από το 2-23 , δηλαδή μετά το 6ο δεκαδικό ψηφίο.

Ο μικρότερος και ο μεγαλύτερος αριθμός που μπορούμε να αναπαραστήσουμε εξαρτάται από τον εκθέτη της δύναμης του 2. Για τα 8 διαθέσιμα bit που έχουμε για τον εκθέτη έχουμε μέγιστο 227-1 = 2127 = 1038 και ελάχιστο το 2-(27-1) = 2-127 = 10-38

Για μεγαλύτερη ακρίβεια και μεγαλύτερους δεκαδικούς έχουμε τους double που είναι 64 bit (double precision):
1 bit είναι το πρόσημο του αριθμού,
11 bit ο εκθέτης ( 10±308 μέγιστο και ελάχιστο)
52 bit το κλασματικό κομμάτι (σφάλμα μετά το 15ο δεκαδικό ψηφίο)

Λαμβάνοντας υπ' όψιν τους 64 bit επεξεργαστές τα πράγματα αλλάζουν. Οι καταχωρητές όπως και οι ακέραιοι γίνονται πλέον 64 bit και όλα διπλασιάζονται εκτός από τους float και τους double.