abs#
Επιστρέφει την απόλυτη τιμή ενός αριθμού.
Η abs παίρνει ένα μοναδικό βαθμωτό, το εξαναγκάζει σε αριθμητικό περιβάλλον και επιστρέφει το μέτρο του — την τιμή με αφαιρεμένο το πρόσημο. Οι μη αριθμητικές συμβολοσειρές μετατρέπονται με τους ίδιους κανόνες όπως στην αριθμητική (αρχικά κενά και προαιρετικό πρόσημο, ακολουθούμενα από ψηφία· τα υπόλοιπα απορρίπτονται, με προειδοποίηση υπό use warnings). Αν το VALUE παραλειφθεί, η abs λειτουργεί επί του $_.
Σύνοψη#
abs VALUE
abs
abs($x)
Τι επιστρέφεται#
Ένας μη αρνητικός αριθμός. Το αποτέλεσμα είναι ακέραιος αν η είσοδος ήταν ακέραιος εντός του εύρους ακεραίων της πλατφόρμας, διαφορετικά αριθμός κινητής υποδιαστολής. Η abs δεν αλλάζει ποτέ το όρισμά της — το αποτέλεσμα είναι ένα νέο βαθμωτό, οπότε η abs $x αφήνει το $x ανέπαφο.
Καθολική κατάσταση που επηρεάζει#
Χωρίς όρισμα, η abs διαβάζει το $_. Δεν γράφει ούτε διαβάζει καμία άλλη ειδική μεταβλητή. Υπό use warnings, ένα μη αριθμητικό όρισμα προκαλεί την τυπική προειδοποίηση Argument "…" isn't numeric μέσω της κανονικής διαδρομής αριθμητικής μετατροπής.
Παραδείγματα#
Αφαίρεση του προσήμου από έναν ακέραιο:
print abs(-7); # 7
print abs(7); # 7
Μέτρο κινητής υποδιαστολής — το αποτέλεσμα διατηρεί την πλήρη ακρίβεια της εισόδου:
print abs(-3.14159); # 3.14159
print abs(-1e-10); # 1e-10
Χρήση της μορφής με προεπιλεγμένο όρισμα μέσα σε βρόχο επί του $_:
for (-3, -1, 0, 2, 4) {
print abs, "\n"; # 3, 1, 0, 2, 4 on separate lines
}
Απόσταση μεταξύ δύο σημείων σε μια αριθμητική γραμμή:
sub distance { abs($_[0] - $_[1]) }
print distance(10, 3); # 7
print distance(3, 10); # 7
Συμβολοσειρά που μοιάζει με αρνητικό αριθμό — η abs αναλύει το αρχικό αριθμητικό πρόθεμα και αφαιρεί το πρόσημο:
print abs("-42"); # 42
print abs(" -3.5xyz"); # 3.5 (warning under use warnings)
Οριακές περιπτώσεις#
Η
abs(undef)επιστρέφει0. Υπόuse warningsεκπέμπειUse of uninitialized value in abs.Μη αριθμητική συμβολοσειρά: η
abs("hello")επιστρέφει0και υπόuse warningsπροειδοποιεί ότι το όρισμα δεν είναι αριθμητικό.Όριο υπερχείλισης ακεραίου: η
absτου πιο αρνητικού ακεραίου της πλατφόρμας (PERL_INT_MIN, π.χ.-2**63σε 64-bit συστήματα) προάγεται σε αποτέλεσμα κινητής υποδιαστολής, επειδή το θετικό αντίστοιχο δεν χωράει σε προσημασμένο ακέραιο:use Config; my $min = -(2 ** ($Config{ivsize} * 8 - 1)); print abs($min); # 9.22337203685478e+18 on 64-bit
Ειδικές τιμές IEEE 754: η
abs(-0.0)επιστρέφει0(θετικό μηδέν). Ηabs("-Inf")επιστρέφειInf. Ηabs("NaN")επιστρέφειNaN— τοNaNδεν έχει πρόσημο που ηabsνα μπορεί να αφαιρέσει με νόημα.Μιγαδικοί αριθμοί και μεγάλοι ακέραιοι δεν υποστηρίζονται από την ενσωματωμένη συνάρτηση. Η
use Math::Complexυπερφορτώνει τηνabsώστε να υπολογίζει το μέτρο· ταMath::BigIntext καιMath::BigFloatext παρέχουν τη δική τους αφαίρεση προσήμου σε αντικείμενα blessed μέσω υπερφόρτωσης τελεστών.Δεν υπάρχει επιτόπια μορφή: η
absεπιστρέφει πάντα νέο βαθμωτό. Για να αντικαταστήσετε την τιμή μιας μεταβλητής με το μέτρο της, εκχωρήστε ξανά:$x = abs $x;
Σημείωση συντακτικού αναλυτή: η μοναδιαία μορφή
abs $xσυνδέεται πιο σφιχτά από τον,αλλά πιο χαλαρά από τους περισσότερους αριθμητικούς τελεστές, οπότε τοabs $x + 1αναλύεται ωςabs($x) + 1, όχι ωςabs($x + 1). Βάλτε παρενθέσεις όταν αμφιβάλλετε:print abs $x + 1; # abs($x) + 1 print abs($x + 1); # abs of the sum
Διαφορές από το upstream#
Πλήρως συμβατό με το upstream Perl 5.42.
Δείτε επίσης#
sqrt— τετραγωνική ρίζα· όπως και ηabsείναι καθαρή αριθμητική μοναδιαία συνάρτηση με μορφή προεπιλογής στο$_int— αποκοπή προς το μηδέν· συνδυάζεται με τηνabsόταν θέλετε το ακέραιο μέτρο ενός αριθμού κινητής υποδιαστολήςsprintf— μορφοποιημένη αριθμητική έξοδος· χρησιμοποιήστε%dή%gσε συνδυασμό με τηνabsγια να αποδώσετε μη προσημασμένα μέτρα$_— το προεπιλεγμένο όρισμα όταν ηabsκαλείται χωρίς όρισμα