<?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