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־ביט) מקודם לתוצאה בנקודה צפה, מכיוון שהמקבילה החיובית אינה נכנסת למספר שלם עם סימן: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 מספקים הסרת סימן משלהם על אובייקטים מבורכים באמצעות העמסת אופרטורים.אין צורת in-place:
absתמיד מחזיר סקלר חדש. כדי להחליף את ערכו של משתנה בגודלו, יש להציב חזרה:$x = abs $x;
הערת parser: הצורה האונארית
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#
תואם מלא ל־Perl 5.42 upstream.