3v4l.org

run code in 500+ PHP versions simultaneously
<?php $x = 1e-15; // naive: catastrophic cancellation $native = exp($x) - 1; echo $native; // 1.1102230246252E-15, WRONG // expm1: computed without cancellation $precise = expm1($x); echo $precise; // 1.00000000000000005E-15, CORRECT // same problem in reverse $y = 1e-15; // naive echo log(1 + $y); // 1.1102230246252E-15, WRONG echo log1p($y); // 1.00000000000000005E-15, CORRECT // real-world use: compound interest on tiny rates. $rate = 0.00001; // 0.001% daily rate $days = 365; // naive continuous compounding $wrong = exp($rate * $days) - 1; // precise $right = expm1($rate * $days);
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/dm1Bh
function name:  (null)
number of ops:  36
compiled vars:  !0 = $x, !1 = $native, !2 = $precise, !3 = $y, !4 = $rate, !5 = $days, !6 = $wrong, !7 = $right
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
    3     0  E >   ASSIGN                                                       !0, 1.0e-15
    6     1        INIT_FCALL                                                   'exp'
          2        SEND_VAR                                                     !0
          3        DO_ICALL                                             $9      
          4        SUB                                                  ~10     $9, 1
          5        ASSIGN                                                       !1, ~10
    7     6        ECHO                                                         !1
   10     7        INIT_FCALL                                                   'expm1'
          8        SEND_VAR                                                     !0
          9        DO_ICALL                                             $12     
         10        ASSIGN                                                       !2, $12
   11    11        ECHO                                                         !2
   14    12        ASSIGN                                                       !3, 1.0e-15
   17    13        INIT_FCALL                                                   'log'
         14        ADD                                                  ~15     1, !3
         15        SEND_VAL                                                     ~15
         16        DO_ICALL                                             $16     
         17        ECHO                                                         $16
   18    18        INIT_FCALL                                                   'log1p'
         19        SEND_VAR                                                     !3
         20        DO_ICALL                                             $17     
         21        ECHO                                                         $17
   21    22        ASSIGN                                                       !4, 1.0e-5
   22    23        ASSIGN                                                       !5, 365
   25    24        INIT_FCALL                                                   'exp'
         25        MUL                                                  ~20     !4, !5
         26        SEND_VAL                                                     ~20
         27        DO_ICALL                                             $21     
         28        SUB                                                  ~22     $21, 1
         29        ASSIGN                                                       !6, ~22
   28    30        INIT_FCALL                                                   'expm1'
         31        MUL                                                  ~24     !4, !5
         32        SEND_VAL                                                     ~24
         33        DO_ICALL                                             $25     
         34        ASSIGN                                                       !7, $25
         35      > RETURN                                                       1

Generated using Vulcan Logic Dumper, using php 8.5.0


preferences:
178.61 ms | 3350 KiB | 17 Q