Μηδέν με πρόσημο
±0
Το μηδέν με πρόσημο είναι ο αριθμός του μηδενός (0) μαζί με το θετικό (+) ή το αρνητικό (-) πρόσημο. Στην συνήθη αριθμητική ο αριθμός μηδέν δεν διαθέτει πρόσημο, έτσι το +0 ή -0 είναι το ίδιο με το 0. Ωστόσο στην επιστήμη υπολογιστών, κάποιες αναπαραστάσεις αριθμών επιτρέπουν την ύπαρξη δύο τύπων μηδενικών, του αρνητικού μηδενός (-0) και του θετικού μηδενός (+0) τα οποία ως αριθμητικές ποσότητες είναι ίσες αλλά επιφέρουν διαφορετικά αποτελέσματα σε συγκεκριμένους υπολογισμούς στα πρόσημα και μεγέθη στο συμπλήρωμα ως προς 1 σε σχέση με τις αριθμητικές αναπαραστάσεις με πρόσημο για τους ακεραίους, και στις περισσότερες αναπαραστάσεις της αριθμητικής κινητής υποδιαστολής. Στις περιπτώσεις αυτές, ο κοινός αριθμός 0 συνήθως αναπαρίσταται ως προεπιλογή με θετικό πρόσημο (+0).
Το πρότυπο IEEE 754 για τις πράξεις κινητής υποδιαστολής (το οποίο ακολουθείται από τους περισσότερους υπολογιστές και γλώσσες προγραμματισμού) απαιτεί την ύπαρξη και του +0 και του −0. Η πραγματική αριθμητική με χρήση μηδενός με πρόσημο αποτελεί εκδοχή της εκτεταμένης γραμμής πραγματικών αριθμών τέτοιας ώστε 1/−0 = −∞ και 1/+0 = +∞, ενώ η διαίρεση δεν είναι ορισμένη για τις πράξεις ±0/±0 and ±∞/±∞.
Τα μηδενικά με αρνητικό πρόσημο αντιστοιχούν στην έννοια της μαθηματικής ανάλυσης όπου το 0 προσεγγίζεται από κάτω ως μονόπλευρο όριο, το οποίο αναπαριστάται ως x → 0−, x → 0−, ή x → ↑0. Η σημειολογία "−0" χρησιμοποιείται επίσης ανεπίσημα υποδηλώνοντας έναν μικρό αρνητικό αριθμό ο οποίος έχει στρογγυλοποιηθεί στο μηδέν. Η έννοια του αρνητικού μηδενός έχει επίσης κάποιες θεωρητικές εφαρμογές στην στατιστική μηχανική και άλλα συναφή πεδία.
Έχει υποστηριχτεί πως η συμπερίληψη του μηδέν με πρόσημο στο πρότυπο IEEE 754 κάνει ευκολότερη την επίτευξη αριθμητικής ακρίβειας σε κάποια κρίσιμα προβλήματα,[1] συγκεκριμένα όταν γίνονται υπολογισμοί με συναρτήσεις μιγαδικών αριθμών.[2]
Αναπαραστάσεις
[Επεξεργασία | επεξεργασία κώδικα]Στην κωδικοποίηση του συμπληρώματος ως προς 2 δεν επιτρέπεται η χρήση αρνητικού μηδενός. Στην αναπαράσταση αριθμών με πρόσημο για ακεραίους αριθμούς ως δυαδικό ψηφίο της μορφής 1+7, το αρνητικό μηδέν αναπαριστάται με την ακολουθία δυαδικών ψηφίων 10000000. Στο συμπλήρωμα ως προς 1 8 δυαδικών ψηφίων, το αρνητικό μηδέν αναπαριστάται με την δυαδική ακολουθία 11111111. Σε όλες τις τρεις κωδικοποιήσεις, το θετικό μηδέν αναπαριστάται ως 00000000.
Στους δυαδικούς αριθμούς κινητής υποδιαστολής του προτύπου IEEE 754, οι μηδενικές τιμές συμβολίζονται μέσω χρήσης του προκατελλημένου εκθέτη[3][4] και της μαντίσας (σταθερό μέρος του αριθμού κιν.υποδ.) ως μηδέν. Το αρνητικό μηδέν δεν έχει ορισμένο το ψηφίο προσήμου, ωστόσο αυτό μπορεί να εξαχθεί μέσω άλλων υπολογισμών όπως π.χ. το αποτέλεσμα που προκύπτει από την αριθμητική υποχείλιση (arithmetic underflow) σε αρνητικό αριθμό, ή ως −1.0×0.0
, ή απλώς ως −0.0
.
Στις δεκαδικές πράξεις κινητής υποδιαστολής IEEE 754 το αρνητικό μηδέν εκφράζεται με τον εκθέτη να διαθέτει την οποιαδήποτε δυνατή τιμή εντός του εύρους της κωδικοποίησης, με την μαντίσα να είναι είναι 0, και το δυαδικό ψηφίο προσήμου 1.
Ιδιότητες
[Επεξεργασία | επεξεργασία κώδικα]Σημειολογία
[Επεξεργασία | επεξεργασία κώδικα]Για τα συστήματα τα οποία υποστηρίζουν και τους δύο τύπους μηδενός, χρησιμοποιείται η σημειολογία και για την διάκριση του προσήμου.
Αριθμητική
[Επεξεργασία | επεξεργασία κώδικα]Οι πράξεις της πρόσθεσης και του πολλαπλασιασμού είναι αντιμεταθετικές, αλλά υπάρχουν κάποιοι ειδικοί κανόνες οι οποίοι διαφοροποιούνται από τους συνήθεις μαθηματικούς κανόνες ως προς την αλγεβραϊκή απλοποίηση. Το σύμβολο χρησιμοποιείται για να υποδηλώσει το αποτέλεσμα με πρόσημο, για παράδειγμα κατά τον πολλαπλασιασμό ή διαίρεση:
- (για διάφορο του 0)
Υπάρχουν ειδικοί κανόνες για την πρόσθεση ή την αφαίρεση με το μηδέν με πρόσημο:
- (για διάφορο του 0)
- (για οποιοδήποτε πεπερασμένο , και −0 όταν γίνεται στρογγυλοποίηση προς το αρνητικό)
Λόγω του αρνητικού μηδενός, και επίσης όταν η στρογγυλοποίηση γίνεται προς τα πάνω ή προς τα κάτω, οι εκφράσεις −(x − y) και (−x) − (−y), για τις μεταβλητές κινητής υποδιαστολής x και y, δεν μπορούν να αντικατασταθούν από y − x. Ωστόσο το (−0) + x μπορεί να αντικατασταθεί με το x μέσω στρογγυλοποίησης προς την πλησιέστερη τιμή (εκτός όταν το x χρησιμοποιείται για την σημειοδότηση NaN).
Κάποιες άλλες συμβάσεις:
- [5]
- (κατά την σύμβαση του προσήμου για την διαίρεση)
- (για τα μη μηδενικά , κατά την σύμβαση του προσήμου για την διαίρεση)
- (NaN ή διακόπτης για απροσδιόριστη μορφή)
Η διαίρεση ενός μη μηδενικού αριθμού με το μηδέν ενεργοποιεί την σήμανση (flag) ως προς την διαίρεση προς το μηδέν ως σήμανση λανθασμένης εκτέλεσης, και εάν έχει οριστεί διαχείριση εξαίρεσης τότε ενεργοποιείται για την διαχείριση του σφάλματος.
Συγκρίσεις
[Επεξεργασία | επεξεργασία κώδικα]Σύμφωνα με το πρότυπο IEEE 754, τα μηδενικά με θετικό και αρνητικό πρόσημο όταν εξετάζονται ως προς την ισότητα μεταξύ τους (με τον λογικό τελεστή ==) θα πρέπει να λογίζονται ως ίσα. Στις γλώσσες προγραμματισμού ωστόσο μπορούν να χρησιμοποιηθούν διάφορα τεχνάσματα ώστε να γίνει διάκριση μεταξύ των δύο τιμών:
- με την τροποποίηση του τύπου δεδομένων (type punning, είδος type casting) του αριθμού ώστε να γίνει τύπος ακεραίου αριθμού, κατά τρόπο ώς να αντικατοπτρίζεται το πρόσημο του ψηφίου στην διάταξη των δυαδικών ψηφίων
- μέσω της συνάρτησης της ISO C
copysign()
(αντίστοιχη με την IEEE 754 copySign πράξη) ώστε να αντιγραφεί το πρόσημο του μηδενός σε κάποιο μη αρνητικό αριθμό - μέσω της μακροεντολής της ISO C
signbit()
(αντίστοιχη με την IEEE 754 isSignMinus πράξη) η οποία επιστρέφει true ή false ανάλογα με το αν έχει τεθεί το πρόσημο του αριθμού - λαμβάνοντας το αντίστοιχο του μηδενός ώστε να βρεθεί είτε το 1/(+0) = +∞ ή 1/(−0) = −∞ (εάν δεν υπάρξει διαχείριση της διαίρεσης με το μηδέν από την διαχείριση σφαλμάτων).
Πέρα από τις παραπάνω μεθόδους, υπάρχουν γλώσσες προγραμματισμού οι οποίες διαθέτουν επιπλέον τελεστές ώστε να διακρίνουν μεταξύ των δύο διαφορετικών περιπτώσεων μηδενός, όπως για παράδειγμα στην μέθοδο equals της Java για την κλάση αριθμών Double
.[6]
Επιστημονικές χρήσεις
[Επεξεργασία | επεξεργασία κώδικα]Ανεπίσημα, το μηδέν με αρνητικό πρόσημο "−0" μερικές φορές χρησιμοποιείται για να υποδηλωθεί πως μια μικρή αρνητική τιμή έχει στρογγυλοποιηθεί στο μηδέν. Για παράδειγμα κατά την παράθεση θερμοκρασιών Κελσίου, το αρνητικό πρόσημο στο μηδέν σημαίνει πως η θερμοκρασία είναι κάτω από το σημείο όπου το νερό γίνεται πάγος.
Στην στατιστική μηχανική, μερικές φορές χρησιμοποιούνται αρνητικές θερμοκρασίες για την περιγραφή συστημάτων με αντιστροφή πληθυσμού, η οποία μπορεί να θεωρηθεί πως διαθέτει θερμοκρασία μεγαλύτερη από την θετική απειρότητα, καθώς ο συντελεστής της ενέργειας στην συνάρτηση της κατανομής πληθυσμού είναι −1/Θερμοκρασία. Στο πλαίσιο αυτό, η θερμοκρασία −0 αποτελεί θεωρητική θερμοκρασία η οποία είναι μεγαλύτερη από την οποιαδήποτε άλλη αρνητική θερμοκρασία, αντιστοιχεί στο θεωρητικό μέγιστο της αντιστροφής πληθυσμού, και είναι το αντίστροφο του +0.[7]
Παραπομπές
[Επεξεργασία | επεξεργασία κώδικα]- ↑ William Kahan, "Branch Cuts for Complex Elementary Functions, or Much Ado About Nothing's Sign Bit", in The State of the Art in Numerical Analysis (eds. Iserles and Powell), Clarendon Press, Oxford, 1987.
- ↑ William Kahan, Derivatives in the Complex z-plane, p. 10.
- ↑ αντί για την αναπαράσταση στην μορφή συμπληρώματος ως προς 2, προστίθεται απλά 127 στον εκθέτη και αποθηκεύεται ως αριθμός χωρίς πρόσημο ώστε να μην υπάρξει αρνητικός αριθμός.
- ↑ W., Weisstein, Eric. «Biased Exponent». mathworld.wolfram.com (στα Αγγλικά). Ανακτήθηκε στις 29 Αυγούστου 2017.
- ↑ Cowlishaw, Mike (7 Απριλίου 2009). «Decimal Arithmetic: Arithmetic operations - square-root». speleotrove.com (IBM Corporation). Αρχειοθετήθηκε από το πρωτότυπο στις 28 Αυγούστου 2017. Ανακτήθηκε στις 7 Δεκεμβρίου 2010.
- ↑ http://java.sun.com/javase/6/docs/api/java/lang/Double.html#equals(java.lang.Object)
- ↑ Kittel, Charles and Herbert Kroemer (1980). Thermal Physics (2nd ed.). W. H. Freeman Company. σελ. 462. ISBN 0-7167-1088-9.
Σχετική βιβλιογραφία
[Επεξεργασία | επεξεργασία κώδικα]- Michael Ingrassia. «Fortran 95 SIGN Change». Sun Developer Network. Ανακτήθηκε στις 15 Οκτωβρίου 2005. the changes in the Fortran
SIGN
function in Fortran 95 to accommodate negative zero - «JScript data types». MSDN JScript. Αρχειοθετήθηκε από το πρωτότυπο στις 17 Φεβρουαρίου 2012. Ανακτήθηκε στις 16 Οκτωβρίου 2005. JScript's floating point type with negative zero by definition
- «A look at the floating-point support of the Java virtual machine». Javaworld. Αρχειοθετήθηκε από το πρωτότυπο στις 17 Φεβρουαρίου 2012. Ανακτήθηκε στις 16 Οκτωβρίου 2005. representation of negative zero in the Java virtual machine
- Bruce Dawson (25 Φεβρουαρίου 2012). «Comparing floating point numbers, 2012 Edition». how to handle negative zero when comparing floating-point numbers
- John Walker. «Minus Zero». UNIVAC Memories. Ανακτήθηκε στις 17 Οκτωβρίου 2005. one's complement numbers on the UNIVAC 1100 family computers