Hi internals! I would like to propose adding three static methods ā `sum()`, `max()`, and `min()` ā to BcMath\Number. Before moving forward, Iād like to gauge whether there is general interest or demand for such functionality.
Of course, I'm aware that these operations can be implemented easily in userland code. However, having them as built-in methods provides a clear performance advantage. In a quick benchmark using a prototype implementation, I observed that `sum()` was approximately 5x faster than a userland implementation, while `max()` and `min()` were roughly 2x faster. I also experimented with an `avg()` method, but found that the performance difference between built-in and userland implementations was negligible. For that reason, I'm not including it in this proposal. The proposed method signatures are as follows: ``` public static function sum(array $nums, ?int $scale = null): Number {} public static function max(array $nums, ?int $scale = null): Number {} public static function min(array $nums, ?int $scale = null): Number {} ``` Each element in `$nums` should be of type `Number`, `string`, or `int`. For reference, here are the userland implementations I used for comparison: sum: ``` $nums = [/* omit */]; $num_0 = new BcMath\Number(0); foreach ($nums as $num) { $num_0 += $num; } ``` max (and min with slight modification): ``` $nums = [/* omit */]; $num_0 = array_shift($nums); foreach ($nums as $num) { $num_0 = $num_0 >= $num ? $num_0 : $num; } ``` Regards, Saki