Αριθμητικές συναρτήσεις

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 εξαναγκάζει το όρισμα μέσω των τυπικών κανόνων μετατροπής συμβολοσειράς σε αριθμό πριν καλέσει τη ρουτίνα C exp(3). Τα 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 καλείται χωρίς ρητό τελεστέο