log#
מחזיר את הלוגריתם הטבעי (בסיס e) של מספר.
log הוא ההופכי של exp. הוא לוקח EXPR מספרי, ממיר אותו ל־float בדיוק כפול אם נדרש, ומחזיר את הלוגריתם שלו לבסיס e (מספר אוילר, בקירוב 2.718281828459045). אם EXPR מושמט, log פועל על $_.
אין built-in עבור לוגריתמים לבסיס שרירותי - השתמשו באלגברה בסיסית (ראו את הדוגמאות למטה) או ב־POSIX::log10 / POSIX::log2 עבור שני הבסיסים הקבועים השכיחים.
תקציר#
log EXPR
log
מה מקבלים בחזרה#
float בדיוק כפול: הלוגריתם הטבעי של EXPR. באופן קונקרטי:
log(1)הוא0.log(exp(1))הוא1(הזהות המגדירה).log(x)עולה ממש עבורx > 0.
קלטים מיוחדים עוקבים אחר כללי IEEE-754 כפי שספריית ה־C של הפלטפורמה מספקת ב־log(3):
log(0)מחזיר אינסוף שלילי (-Inf).log(x)עבורx < 0מחזירNaN.log(Inf)מחזירInf;log(NaN)מחזירNaN.
התוצאה היא תמיד float, גם כאשר הקלט הוא מספר שלם או מחרוזת.
דוגמאות#
הזהות המגדירה - הלוג הטבעי של e הוא 1:
use POSIX ();
print log(exp(1)), "\n"; # 1
לוגריתם בסיס־10, נבנה מ־log על־ידי החלפת בסיס. הלוג של בסיס־N של מספר שווה ללוג הטבעי שלו מחולק בלוג הטבעי של N:
sub log10 {
my ($n) = @_;
return log($n) / log(10);
}
print log10(1000), "\n"; # 3
print log10(0.01), "\n"; # -2
אותו ניב מוכלל לכל בסיס - שימושי עבור ביטים (בסיס 2), דציבלים (בסיס 10), או כל דבר אחר:
sub log_base {
my ($base, $n) = @_;
return log($n) / log($base);
}
print log_base(2, 1024), "\n"; # 10
print log_base(16, 65536), "\n"; # 4
פעולה על $_ - שימושית בתוך map או לולאת שורות while:
my @natural_logs = map { log } 1, 2, 3, 4;
המרה מספרית של ארגומנט מחרוזת - log מעריך את האופרנד שלו בהקשר מספרי בדיוק כמו האופרטורים האריתמטיים:
print log("7.389056"), "\n"; # ~2 (log of e^2, give or take)
מקרי קצה#
log(0)הוא-Inf, לא שגיאה ולא חריגת חלוקה־באפס. Perl אינו מת; אתם מקבלים אינסוף float בחזרה וכל אריתמטיקה נוספת מפיצה אותו:my $x = log(0); # -Inf print $x + 1, "\n"; # -Inf
logשל מספר שלילי הואNaN. שוב, אין חריגה - הקורא אחראי לבדיקת הטווח אם זה משנה:my $x = log(-1); # NaN print $x == $x ? "num" : "nan", "\n"; # nan (NaN != NaN)
הגנו על הקלט אם אתם זקוקים לתוצאה מוגדרת:
die "log domain error" unless $n > 0; my $l = log($n);
מחרוזות לא־מספריות מומרות ל־
0ולכן מפיקות-Inf, ותחתuse warningsמפעילותArgument "..." isn't numeric:use warnings; print log("hello"), "\n"; # -Inf, with warning
צורה ללא־ארגומנטים משתמשת ב־
$_.logעם רשימת ארגומנטים ריקה קורא את הנושא הנוכחי; בתוךmap { log }אוwhile (<>) { print log; }זהו הקיצור הרגיל.קלט מספר שלם לעומת float אינו עושה הבדל לסוג התוצאה: ערך ההחזרה הוא תמיד float.
log(2)ו־log(2.0)הם אותו ערך.Precision is whatever the platform C library’s
log(3)deliverstypically ~15–17 significant decimal digits on x86-64 Linux. Results are not bit-for-bit portable across architectures.
הבדלים מ־upstream#
תואם מלא ל־upstream Perl 5.42.
ראו גם#
exp- ההופכי:exp(log($x))הוא$xעבור$x > 0, ו־log(exp($x))הוא$xעבור כל$xסופי**- אופרטור החזקה;$x ** $yשקול ל־exp($y * log($x))עבור$xחיוביPOSIX::log10- לוגריתם בסיס־10, ישירות מספריית ה־C; מהיר יותר ומעט יותר מדויק מ־log($x)/log(10)POSIX::log2- לוגריתם בסיס־2, אותו סיפורPOSIX::log1p-log(1 + $x)המחושב במדויק עבור$xקטן, היכן שהצורה הנאיבית מאבדת דיוק