3v4l.org

run code in 300+ PHP versions simultaneously
<?php /** * Immutable class for handling numbers with precision. * * Never change the $number or the $precision after the creation of the object. */ class DecimalNumber { private $precision; private $number; public function __construct() { return $this; } /** * Get an instance given a string and a precision * @param string $string The decimal number in string form * @param int $precision The precision of the number * @return DecimalNumber Return new instance */ public static function get($string, $precision = 4) { $number = static::_get($string, $precision); $number->number = bcadd($string, '0', $precision); return $number; } private static function _get($string, $precision) { $me = get_called_class(); $number = new $me; $number->precision = $precision; $number->number = $string; return $number; } /** * Add a formal entry point for decimal numbers * @param DecimalNumber $number Decimal number to base off of * @param integer $precision new precision * @return DecimalNumber DecimalNumber with new precision */ public static function decimalNumber(DecimalNumber $number, $precision = 4) { if ($number->precision === $precision) return clone $number; return static::get($number, $precision); } /** * Perform an addition operation * @param DecimalNumber $number Addend * @return DecimalNumber Sum */ public function sum(DecimalNumber $number) { return DecimalNumber::_get(bcadd($this->number, $number, $this->precision), $this->precision); } /** * Perform a subtraction operation * @param DecimalNumber $number Addend * @return DecimalNumber Sum */ public function difference(DecimalNumber $number) { return DecimalNumber::_get(bcsub($this->number, $number, $this->precision), $this->precision); } /** * Perform a multiplication operation * @param DecimalNumber $number Multiplier * @return DecimalNumber Product */ public function product(DecimalNumber $number) { return DecimalNumber::_get(bcmul($this->number, $number, $this->precision), $this->precision); } /** * Perform a division operation * @param DecimalNumber $number Divisor * @return DecimalNumber Quotient */ public function quotient(DecimalNumber $number) { return DecimalNumber::_get(bcdiv($this->number, $number, $this->precision), $this->precision); } public function floored() { return DecimalNumber::_get(bcadd(bcadd($this->number, '0'), '0', $this->precision), $this->precision); } /** * Automagically convert to a string * @return string returns a string containing the value of this DecimalNumber */ public function __toString() { return $this->number; } } $a = DecimalNumber::get('.7'); $b = DecimalNumber::get('.1'); $c = $a->sum($b); $d = $c->product(DecimalNumber::get('10'));

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.3.60.0130.00716.75
8.3.50.0090.01017.51
8.3.40.0060.00918.70
8.3.30.0120.00318.90
8.3.20.0040.00418.79
8.3.10.0100.01020.38
8.3.00.0030.00517.63
8.2.180.0170.00016.63
8.2.170.0150.00022.96
8.2.160.0070.00722.11
8.2.150.0040.00424.18
8.2.140.0050.00324.66
8.2.130.0070.00026.16
8.2.120.0040.00419.89
8.2.110.0060.00319.24
8.2.100.0030.00917.84
8.2.90.0030.00619.47
8.2.80.0030.00619.32
8.2.70.0040.00417.75
8.2.60.0000.00817.93
8.2.50.0030.00518.07
8.2.40.0040.00418.16
8.2.30.0030.00517.97
8.2.20.0040.00417.56
8.2.10.0080.00017.80
8.2.00.0040.00417.77
8.1.280.0100.00325.92
8.1.270.0000.01023.99
8.1.260.0080.00026.35
8.1.250.0000.00728.09
8.1.240.0080.00020.82
8.1.230.0030.00920.87
8.1.220.0040.00417.78
8.1.210.0030.00618.85
8.1.200.0000.00917.35
8.1.190.0050.00217.52
8.1.180.0000.00818.10
8.1.170.0000.00818.94
8.1.160.0000.00718.91
8.1.150.0070.00018.68
8.1.140.0030.00717.42
8.1.130.0030.00317.73
8.1.120.0030.00317.51
8.1.110.0080.00017.38
8.1.100.0000.00817.39
8.1.90.0070.00317.46
8.1.80.0050.00317.49
8.1.70.0030.00517.49
8.1.60.0000.00817.64
8.1.50.0060.00317.51
8.1.40.0000.00817.55
8.1.30.0060.00317.61
8.1.20.0030.00517.58
8.1.10.0000.00817.62
8.1.00.0070.00017.54
8.0.300.0070.00019.86
8.0.290.0040.00416.75
8.0.280.0000.00818.49
8.0.270.0050.00317.25
8.0.260.0030.00316.96
8.0.250.0070.00017.06
8.0.240.0040.00417.04
8.0.230.0000.00717.06
8.0.220.0050.00216.88
8.0.210.0000.00716.89
8.0.200.0040.00416.88
8.0.190.0000.00716.92
8.0.180.0000.00716.91
8.0.170.0030.00517.02
8.0.160.0070.00016.97
8.0.150.0090.00016.84
8.0.140.0000.00716.94
8.0.130.0000.00713.48
8.0.120.0000.00816.90
8.0.110.0000.00816.76
8.0.100.0000.00716.92
8.0.90.0020.00516.89
8.0.80.0080.00816.99
8.0.70.0040.00417.10
8.0.60.0050.00216.95
8.0.50.0000.00817.04
8.0.30.0110.00717.16
8.0.20.0070.01117.10
8.0.10.0070.00016.91
8.0.00.0180.00516.91
7.4.330.0050.00014.62
7.4.320.0060.00016.50
7.4.300.0070.00016.54
7.4.290.0030.00316.57
7.4.280.0000.01016.54
7.4.270.0000.00716.51
7.4.260.0000.00513.30
7.4.250.0040.00416.52
7.4.240.0040.00416.65
7.4.230.0050.00216.43
7.4.220.0150.00616.48
7.4.210.0090.00816.58
7.4.200.0000.00816.73
7.4.190.0030.00616.50
7.4.160.0140.00316.58
7.4.150.0130.00617.07
7.4.140.0090.01417.24
7.4.130.0130.00616.56
7.4.120.0050.01516.51
7.4.110.0070.01016.66
7.4.100.0090.00916.54
7.4.90.0140.00316.52
7.4.80.0110.00718.80
7.4.70.0040.01416.45
7.4.60.0080.00816.54
7.4.50.0030.00623.17
7.4.40.0030.00921.69
7.4.30.0120.00816.57
7.4.00.0030.01315.06
7.3.330.0070.00013.53
7.3.320.0040.00413.57
7.3.310.0000.00816.23
7.3.300.0000.00616.27
7.3.290.0070.00716.40
7.3.280.0060.01016.36
7.3.270.0160.00317.07
7.3.260.0090.00918.24
7.3.250.0140.00916.49
7.3.240.0100.00716.54
7.3.230.0120.00916.36
7.3.210.0160.00216.51
7.3.200.0070.01019.39
7.3.190.0060.01716.24
7.3.180.0110.00516.47
7.3.170.0030.01316.37
7.3.160.0080.00816.29
7.3.120.0060.00914.98
7.2.330.0090.00916.50
7.2.320.0060.01616.75
7.2.310.0070.01116.74
7.2.300.0140.00316.49
7.2.290.0070.01016.44
7.2.60.0070.00716.73
7.1.200.0060.00615.84
7.1.70.0000.00816.89
7.1.60.0100.01319.40
7.1.50.0030.00717.08
7.1.00.0000.07322.29
7.0.200.0070.00716.78
7.0.140.0000.08322.10
7.0.120.0000.03322.09
7.0.60.0070.09019.96
7.0.50.0030.04317.97
7.0.40.0170.06720.21
7.0.30.0330.06320.23
7.0.20.0130.05020.04
7.0.10.0230.05020.14
7.0.00.0200.04020.23
5.6.280.0100.06720.88
5.6.210.0070.08720.55
5.6.200.0030.07018.19
5.6.190.0230.07320.43
5.6.180.0300.07020.77
5.6.170.0230.04720.54
5.6.160.0100.06020.49
5.6.150.0200.08320.50
5.6.140.0270.09320.40
5.6.130.0200.05720.40
5.6.120.0230.08020.32
5.6.110.0100.05020.35
5.6.100.0270.08020.51
5.6.90.0200.04020.48
5.6.80.0270.06319.89
5.6.70.0370.07019.85
5.6.60.0200.08319.78
5.6.50.0300.05019.79
5.6.40.0130.04719.68
5.6.30.0200.06719.86
5.6.20.0200.05319.85
5.6.10.0300.06019.53
5.6.00.0230.07319.69
5.5.350.0400.06720.44
5.5.340.0030.04017.97
5.5.330.0330.07720.25
5.5.320.0130.04720.31
5.5.310.0270.07720.43
5.5.300.0270.07020.30
5.5.290.0130.04720.04
5.5.280.0300.07720.19
5.5.270.0330.07020.23
5.5.260.0100.05720.02
5.5.250.0200.04020.05
5.5.240.0170.05719.52
5.5.230.0300.07319.70
5.5.220.0200.08019.35
5.5.210.0230.05019.37
5.5.200.0200.08319.68
5.5.190.0170.05319.57
5.5.180.0270.07719.34
5.5.160.0330.06319.56
5.5.150.0300.07319.64
5.5.140.0200.04019.58
5.5.130.0170.08019.57
5.5.120.0170.08319.55
5.5.110.0270.07019.64
5.5.100.0230.07319.31
5.5.90.0200.08019.45
5.5.80.0270.07719.54
5.5.70.0170.07719.47
5.5.60.0230.07019.21
5.5.50.0330.07319.38
5.5.40.0130.04319.43
5.5.30.0130.04019.28
5.5.20.0170.04019.21
5.5.10.0170.04019.45
5.5.00.0100.04319.60
5.4.450.0230.08019.48
5.4.440.0230.08019.45
5.4.430.0170.06019.18
5.4.420.0200.06719.20
5.4.410.0200.04319.30
5.4.400.0200.05019.16
5.4.390.0200.08018.88
5.4.380.0100.04719.00
5.4.370.0130.06719.16
5.4.360.0270.06719.28
5.4.350.0200.06019.12
5.4.340.0330.07019.24
5.4.320.0270.07019.15
5.4.310.0300.06719.21
5.4.300.0300.06719.14
5.4.290.0170.08019.15
5.4.280.0170.07319.25
5.4.270.0170.05319.05
5.4.260.0230.05018.85
5.4.250.0230.04319.07
5.4.240.0270.06719.14
5.4.230.0230.07718.87
5.4.220.0300.06719.11
5.4.210.0230.07018.96
5.4.200.0400.04018.99
5.4.190.0200.03319.00
5.4.180.0100.04318.91
5.4.170.0100.04019.14
5.4.160.0170.04019.18
5.4.150.0230.02719.09
5.4.140.0230.03716.54
5.4.130.0200.06716.31
5.4.120.0170.04716.54
5.4.110.0170.06716.39
5.4.100.0200.03016.42
5.4.90.0170.05016.30
5.4.80.0200.05316.38
5.4.70.0130.03316.42
5.4.60.0130.03316.52
5.4.50.0130.03716.31
5.4.40.0200.06716.51
5.4.30.0130.04016.38
5.4.20.0130.03316.31
5.4.10.0130.03716.36
5.4.00.0130.03315.99
5.3.290.0230.07314.69
5.3.280.0130.07014.67
5.3.270.0170.03714.64
5.3.260.0170.03314.81
5.3.250.0170.03314.63
5.3.240.0130.05014.69
5.3.230.0270.06014.66
5.3.220.0170.04714.64
5.3.210.0370.03714.62
5.3.200.0200.04014.63
5.3.190.0100.04314.62
5.3.180.0070.04314.61
5.3.170.0130.03714.58
5.3.160.0170.03714.59
5.3.150.0170.04014.53
5.3.140.0200.07014.73
5.3.130.0170.03314.72
5.3.120.0100.04714.57
5.3.110.0130.03714.61
5.3.100.0200.03014.09
5.3.90.0130.04014.12
5.3.80.0230.03014.05
5.3.70.0070.04014.05
5.3.60.0170.03014.07
5.3.50.0130.03713.97
5.3.40.0100.04013.97
5.3.30.0200.03313.86
5.3.20.0170.03013.79
5.3.10.0100.04313.70
5.3.00.0170.03013.83
5.2.170.0170.02312.25
5.2.160.0070.03012.25
5.2.150.0130.02712.25
5.2.140.0170.02712.25
5.2.130.0100.02712.25
5.2.120.0100.02712.25
5.2.110.0100.03312.25
5.2.100.0130.02312.25
5.2.90.0130.02712.25
5.2.80.0130.02712.25
5.2.70.0130.02712.25
5.2.60.0030.03312.25
5.2.50.0230.02712.25
5.2.40.0030.03312.25
5.2.30.0100.03312.25
5.2.20.0100.03712.25
5.2.10.0170.02012.25
5.2.00.0100.04712.25
5.1.60.0130.04012.25
5.1.50.0130.02712.25
5.1.40.0130.02012.25
5.1.30.0070.03012.25
5.1.20.0170.05312.25
5.1.10.0070.03312.25
5.1.00.0070.03012.25
5.0.50.0070.02012.25
5.0.40.0070.04712.25
5.0.30.0030.04012.25
5.0.20.0070.02012.25
5.0.10.0030.02312.25
5.0.00.0070.04312.25
4.4.90.0070.01312.25
4.4.80.0030.01712.25
4.4.70.0030.03012.25
4.4.60.0070.01312.25
4.4.50.0070.03712.25
4.4.40.0070.02312.25
4.4.30.0100.03312.25
4.4.20.0100.02712.25
4.4.10.0030.01712.25
4.4.00.0030.02712.25
4.3.110.0130.02012.25
4.3.100.0030.03712.25
4.3.90.0070.01312.25
4.3.80.0100.03712.25
4.3.70.0070.01312.25
4.3.60.0030.01712.25
4.3.50.0030.02712.25
4.3.40.0030.02312.25
4.3.30.0030.01312.25
4.3.20.0000.03012.25
4.3.10.0070.03312.25
4.3.00.0000.02712.25

preferences:
55.95 ms | 401 KiB | 5 Q