3v4l.org

run code in 300+ PHP versions simultaneously
<?php declare(strict_types=1); error_reporting(E_ALL); $num1 = new \BcMath\Number('0.12345'); $otherValuesNoFrac = [ 'BC' => new \BcMath\Number('2.1'), 'int' => 2, 'float' => 2.1, 'numeric-string' => '2.1', 'non-numeric-string' => 'xyz', 'bool' => true, 'null' => null, 'array' => [], 'object' => new stdClass(), 'resource' => fopen('php://input', 'r'), 'closure' => static fn () => 1, 'generator' => (function () { yield 1; })(), 'stringable' => new class implements Stringable { public function __toString() { return '1.0'; } }, ]; $binaryOps = [ '+' => static fn ($a, $b) => $a + $b, '-' => static fn ($a, $b) => $a - $b, '*' => static fn ($a, $b) => $a * $b, '/' => static fn ($a, $b) => $a / $b, '%' => static fn ($a, $b) => $a % $b, '.' => static fn ($a, $b) => $a . $b, '**' => static fn ($a, $b) => $a ** $b, '<<' => static fn ($a, $b) => $a << $b, '>>' => static fn ($a, $b) => $a >> $b, '<' => static fn ($a, $b) => $a < $b, '<=' => static fn ($a, $b) => $a <= $b, '>' => static fn ($a, $b) => $a >=$b, '>=' => static fn ($a, $b) => $a >= $b, '<=>' => static fn ($a, $b) => $a <=> $b, '==' => static fn ($a, $b) => $a == $b, '!=' => static fn ($a, $b) => $a != $b, '&' => static fn ($a, $b) => $a & $b, '^' => static fn ($a, $b) => $a ^ $b, '|' => static fn ($a, $b) => $a | $b, '&&' => static fn ($a, $b) => $a && $b, '||' => static fn ($a, $b) => $a || $b, 'and' => static fn ($a, $b) => $a and $b, 'xor' => static fn ($a, $b) => $a xor $b, 'or' => static fn ($a, $b) => $a or $b, ]; $separator = '------------------------------'; foreach ($otherValuesNoFrac as $name => $otherVal) { echo "{$separator} BC vs {$name} {$separator}\n"; foreach ($binaryOps as $op => $fn) { echo "{$op}: "; try { var_dump($fn($num1, $otherVal)); } catch (Throwable $e) { echo $e::class . ': ' . $e->getMessage() . "\n"; } } if ($name === 'BC') { continue; } echo "{$separator} {$name} vs BC {$separator}\n"; foreach ($binaryOps as $op => $fn) { echo "{$op}: "; try { var_dump($fn($otherVal, $num1)); } catch (Throwable $e) { echo $e::class . ': ' . $e->getMessage() . "\n"; } } }

preferences:
24.97 ms | 406 KiB | 5 Q