פונקציות מספריות

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.

ראו גם#

  • sqrt — שורש ריבועי; כמו abs היא פונקציה אונארית מספרית טהורה עם צורת ברירת מחדל ל־$_

  • int — קיטום לעבר אפס; משתלב עם abs כאשר רוצים את הגודל השלם של מספר בנקודה צפה

  • sprintf — פלט מספרי מעוצב; יש להשתמש ב־%d או %g יחד עם abs להצגת גדלים ללא סימן

  • $_ — ארגומנט ברירת המחדל כאשר abs נקרא ללא ארגומנט