Τι είναι τι; · bei.pm

Αυτό το κείμενο μεταφράστηκε αυτόματα μέσω του OpenAI GPT-4o Mini

Σε αυτή την ενότητα υπάρχουν άρθρα για τα μορφότυπα αρχείων και την Αντίστροφη Μηχανική.

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

tl;dr:
Η σημειογραφία μου βασίζεται σε μεγάλο βαθμό στο C99 <stdint.h>. Όποιος μπορεί να κατανοήσει αυτή τη σημειογραφία, σίγουρα θα καταφέρει να κατανοήσει και τη δική μου.

Ακέραιος

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

Οι Integer σε μορφές δεδομένων συνήθως ορίζονται εντός ενός καθορισμένου εύρους αριθμών, σχεδόν μιας ανάλυσης. Αυτό το δηλώνω σε bits - για το λόγο ότι ένα "Byte" και οι τύποι που βασίζονται σε αυτό (Word, Qword, ...) είναι συνήθως εξαρτώμενοι από την πλατφόρμα.

Επιπλέον, στους τύπους Integer γίνεται διάκριση μεταξύ φυσικών αριθμών (ℕ, δηλαδή, χωρίς πρόσημο - Unsigned) και ακέραιων αριθμών (ℤ, δηλαδή, με πρόσημο - Signed).
Αυτή η πληροφορία είναι ορατή μέσω ενός προσήμου στον προσδιοριστή (u ή s).

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

Οι αριθμοί χωρίς πρόσημο δηλώνονται από εμένα στα έγγραφά μου ως uint, με την επακόλουθη αναφορά της ακρίβειας σε Bits.
Οι αριθμοί με πρόσημο δηλώνονται από εμένα στα έγγραφά μου ως sint, επίσης με την επακόλουθη αναφορά της ακρίβειας σε Bits.

Αποφεύγω τη χρήση του τύπου δεδομένων "char" για χαρακτήρες, καθώς οι συμβολοσειρές συνήθως αναπαριστούν μόνο ακολουθίες Integer τιμών με ειδική ερμηνεία.
Αυτές αναπαρίστανται ως uint(8)[].

Παραδείγματα:

Σημειογραφία C99 stdint.h-Ισοδύναμο Περιγραφή Διάστημα αριθμών
uint(16) uint16_t Ακέραιος χωρίς πρόσημο, μήκους 16 Bit 0 - 65.535
sint(8) int8_t Υπογεγραμμένος Ακέραιος, μήκους 8 Bit, Δυαδικό συμπλήρωμα -126 - 127
uint(24) uint32_t:24 Ακέραιος χωρίς πρόσημο, μήκους 24 Bit 0 - 16.777.216

Τιμές σταθερού δεκαδικού

Αξίες σταθερού σημείου είναι αριθμητικές τιμές από το φάσμα των Ρητών Αριθμών (Q), οι οποίες διαθέτουν συνεπώς κόμμα καθώς και δεκαδικά ψηφία.

Στις τιμές σταθερού σημείου, η θέση του κόμματος είναι - γι' αυτό και το όνομα - καθορισμένη εκ των προτέρων από τον τύπο δεδομένων.
Αυτό οδηγεί επίσης σε ένα σταθερό εύρος αριθμών για αριθμούς αυτού του τύπου δεδομένων, που εκφράζεται μαθηματικά ως πεπερασμένο εύρος.

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

Ο τύπος δεδομένων χρησιμοποιείται επίσης, για παράδειγμα, από συστήματα διαχείρισης βάσεων δεδομένων όταν πρέπει να πληρούνται σταθερές απαιτήσεις.
Να σκεφτούμε εδώ, για παράδειγμα, συστήματα για μόνιμη αποθήκευση χρηματοοικονομικών δεδομένων; οι περισσότερες νομισματικές μονάδες περιορίζονται σε 2 ψηφία μετά το κόμμα. (Ωστόσο, δεν είναι σοφό να χρησιμοποιούνται γι' αυτόν τον σκοπό οι τιμές σταθερού σημείου; καλύτερα είναι να αποθηκεύεται απευθείας η μικρότερη νομισματική μονάδα ως ακέραιος και να αφήνεται το υπόλοιπο της αναπαράστασης).

Ανάλογα με τις ακέραιες αναπαραστάσεις, δηλώνω για τις τιμές σταθερού σημείου την ανάλυση του αριθμού πριν και μετά το κόμμα:
ufixed(9,7) αναφέρεται σε έναν τύπο δεδομένων που διατηρεί 9 bits για την τιμή πριν το κόμμα και 7 bits για την τιμή μετά το κόμμα; συνολικά δηλαδή 16 bits και μπορεί να καλύψει, για παράδειγμα, ως διάνυσμα δύο ανεξάρτητων ακέραιων αριθμών μια περιοχή από (0,0) έως (511,127).
Ωστόσο, αυτή η ερμηνεία θα σπαταλήσει 28 αριθμούς στην δεκαδική τους αναπαράσταση, καθώς μάλλον θα περιοριζόμασταν στην πράξη σε μέγιστο (511,99).

Αντί μιας άμεσης ερμηνείας της τιμής σταθερού σημείου ως διάνυσμα από 2 ξεχωριστούς ακέραιους - που σχεδόν πάντα σημαίνει μια αχρησιμοποίητη περιοχή δεδομένων κατά την μετατροπή σε δεκαδικούς αριθμούς και μια χειροκίνητη μεταφορά - μπορεί επίσης να ερμηνευτεί η περιοχή των δεκαδικών ψηφίων ως κλάσμα της συνολικής τους ανάλυσης.
Με το παράδειγμα του προηγούμενου ufixed(9,7) προκύπτει έτσι ένα κλάσμα με παρονομαστή ίσο με 27 - η αριθμητική περιοχή κυμαίνεται τότε από 0,00 έως 511 + 126127 Για την μετατροπή σε δεκαδική αναπαράσταση, το ψηφίο μετά το κόμμα θα πρέπει να διαιρεθεί με 128.
Με αυτήν την παραλλαγή, είναι πιο εύκολο να εκτελούνται υπολογιστικές διαδικασίες, καθώς η μεταφορά προκύπτει αυτόματα, γεγονός που καθιστά αυτήν την παραλλαγή γενικά προτιμώμενη.
Ωστόσο, αυτή η παραλλαγή έχει το μειονέκτημα ότι τα δεκαδικά ψηφία στην δεκαδική αναπαράσταση δεν διαθέτουν πλέον εγγυημένη ανάλυση, δηλαδή ένα μόνο δεκαδικό ψηφίο δεν έχει πλέον την αξία 0.01, αλλά 0.007874, γεγονός που θα οδηγήσει σε αντίστοιχα σφάλματα στρογγυλοποίησης.

Ποια ερμηνευτική μέθοδος χρησιμοποιείται, καταγράφεται αντίστοιχα στο σημείο χρήσης.

Τιμές κινητής υποδιαστολής

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

Ένας αριθμός κινητής υποδιαστολής συνήθως αποτελείται από τα εξής στοιχεία:

Σημαία (0 ή 1) Εκθέτης Μαντίσα

Eνώ η σημαία μπορεί να προσδιοριστεί εύκολα ως δυαδική πληροφορία ναι/όχι, ο πραγματικός αριθμός σχηματίζεται μέσω της εξίσωσης
Μαντίσα * 2Εκθέτης

Επιπλέον, υπάρχουν μια σειρά από σταθερές τιμές που καλύπτουν ειδικές περιπτώσεις ρητών αριθμών - μεταξύ των οποίων ±∞ και NaN ("κανένας έγκυρος αριθμός").

Οι αξίες κινητής υποδιαστολής είναι ιδιαίτερα χρήσιμες όταν η ακρίβεια δεν είναι τόσο σημαντική, καθώς σε αυτόν τον τύπο τιμών είναι αναπόφευκτοι οι σφάλματα στρογγυλοποίησης και, επομένως, οι απώλειες ακρίβειας. Συνήθως, οι αξίες κινητής υποδιαστολής χρησιμοποιούνται, για παράδειγμα, για τον καθορισμό συντεταγμένων, όπως οι κορυφαίοι διανύσματα σε 3D μοντέλα ή καμπύλες Bézier/σπλίνα για οπτικούς σκοπούς αναπαράστασης.

Στα δεδομένα μορφών, οι αξίες κινητής υποδιαστολής καθορίζονται ως float(Μαντίσα, Εκθέτης).
Αν χρησιμοποιηθεί μορφή που αποκλίνει από το IEEE 754, αυτό θα δηλωθεί αναλόγως.