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

exp#

מעלה את e בחזקה.

exp מחזיר את e (בסיס הלוגריתמים הטבעיים, בערך 2.718281828459045) המועלה בחזקת EXPR. הוא ההיפוך של log: עבור כל $x חיובי וסופי, exp(log($x)) משחזר את $x בכפוף לעיגול נקודה צפה. ללא ארגומנט, exp פועל על $_.

תקציר#

exp EXPR
exp

מה מקבלים בחזרה#

מספר בנקודה צפה בדיוק כפול. התוצאה תמיד אי־שלילית: exp(0) == 1, exp של כל ערך חיובי גדול מ־1, ו־exp של כל ערך שלילי נמצא בקטע הפתוח (0, 1).

בכל יעד Linux ש־pperl תומך בו, הטיפוס הבסיסי הוא IEEE 754 binary64, ולכן טווח התוצאות הסופיות הוא בערך 5e-324 עד 1.7976931348623157e+308. ארגומנטים מעל בערך 709.78 עוברים גלישה ל־Inf; ארגומנטים מתחת בערך -745 עוברים תת־גלישה ל־0.0.

דוגמאות#

לקבל את e עצמו, ולוודא את הנסיעה חזור מול log:

my $e = exp(1);                     # 2.718281828459045
printf "%.15f\n", exp(log(42));     # 42.000000000000000

הצורה ללא־ארגומנט קוראת את $_:

for (1, 2, 3) {
    printf "exp(%d) = %.6f\n", $_, exp;
}
# exp(1) = 2.718282
# exp(2) = 7.389056
# exp(3) = 20.085537

ניתן להרכיב עם פונקציות מספריות מובנות אחרות. הסינוס ההיפרבולי, למשל, אין לו אופרטור ייעודי אך הוא נובע מ־exp:

sub sinh { (exp($_[0]) - exp(-$_[0])) / 2 }
printf "%.6f\n", sinh(1);           # 1.175201

גלישה בקצה העליון של טווח IEEE 754:

print exp(709), "\n";               # 8.21840746949e+307
print exp(710), "\n";               # Inf

תת־גלישה בקצה התחתון:

print exp(-745), "\n";              # 5e-324  (smallest subnormal)
print exp(-746), "\n";              # 0

מקרי קצה#

  • ארגומנט חיובי גדול מאוד: כל ארגומנט גדול מבערך 709.78 מפיק Inf. Inf מתפשט דרך אריתמטיקה נוספת (Inf + 1 == Inf, Inf - Inf הוא NaN) ומומר למחרוזת כ־"Inf".

  • ארגומנט שלילי מאוד: ארגומנטים מתחת לבערך -745 עוברים תת־גלישה ל־0.0. ערכים שביניהם מוצגים כמספרי נקודה צפה דנורמליים עם דיוק שמתקצר בהדרגה.

  • קלט NaN: exp(NaN) הוא NaN. NaN משווה כלא־שווה לכל דבר כולל עצמו - בדקו עם Scalar::Util::looks_like_number או $x != $x במקום ==.

  • exp(0) הוא בדיוק 1, לא קירוב מעוגל.

  • ארגומנט לא־מספרי: Perl ממיר את הארגומנט באמצעות כללי המרת המחרוזת־למספר הסטנדרטיים לפני קריאה לשגרת exp(3) של C. exp("") ו־exp("abc") הם לפיכך exp(0) == 1, עם אזהרת Argument "…" isn't numeric תחת use warnings. מחרוזת מספרית מובילה כמו "3.5xyz" הופכת ל־3.5, שוב עם אזהרה.

  • ארגומנט undef: מומר ל־0, מניב 1, עם אזהרת uninitialized תחת use warnings.

  • הקשר רשימה: exp היא פונקציה מספרית חד־ארגומנטית. היא מתעלמת מהקשר רשימה ותמיד מחזירה סקלר יחיד. my @r = exp(2) מכניס איבר אחד אל @r.

הבדלים מ־upstream#

תואם מלא ל־upstream Perl 5.42.

ראו גם#

  • log - לוגריתם טבעי, ההיפוך של exp; exp(log($x)) == $x עבור $x חיובי

  • sqrt - שורש ריבועי; sqrt($x) == exp(log($x)/2) עבור $x חיובי

  • sin - סינוס, הפונקציה הטרנסצנדנטית החד־ארגומנטית המובנית האחרת

  • cos - קוסינוס; יחד עם sin ו־exp מכסה את הטרנסצנדנטיים הסטנדרטיים הזמינים ללא מודול

  • abs - ערך מוחלט, שימושי בעת הזנת כמות עם סימן אל log לאחר מניפולציה מבוססת exp

  • $_ - ארגומנט ברירת מחדל כש־exp נקרא ללא אופרנד מפורש