.R1
Новичок
В bcmul() обрезана воспринимаемая десятичная часть?
Функция bcmul() при работе с числами меньше 0.00001 возвращает ноль (!). Вот от кого не ожидал!
Конечно, в этом случае обычное умножение работает.
Но моя небольшая вычислительная система абсолютно не справляется со своими задачами стандартными арифметическими операциями PHP (которые вызывают моментальное расхождение вследствие ошибок округления). А именно: требуется много складывать числа меньше единицы и много умножать числа порядка 10000 на числа порядка 0.00001.
Причем другие функции bcmath, в отличие от bcmul, выдавали вполне ожидаемый результат. Такое впечатление, что точность умножения где-то задается. Как известно, в php.ini есть лишь bcmath.scale, которая не повлияла на bcmul, даже после установки значения 20.
Самое интересное, что я не нашел нигде упоминания этой особенности функции bcmul(). Возможно, есть какое-то объяснение в зависимости от платформы или сервера.
Тестировано на php 4.4, 5.1; Linux, Win; apache 1, 2 - короче без разницы.
Есть какие-нибудь выходы из такой ситуации?
PHP:
bcscale(33);
echo bcmul(1E-4, 2E-3); // 0.0000002
echo bcmul(1E-4, 2E-5); // 0.0000
Конечно, в этом случае обычное умножение работает.
PHP:
echo 1E-4 * 2E-5; // 2E-009
Причем другие функции bcmath, в отличие от bcmul, выдавали вполне ожидаемый результат. Такое впечатление, что точность умножения где-то задается. Как известно, в php.ini есть лишь bcmath.scale, которая не повлияла на bcmul, даже после установки значения 20.
Самое интересное, что я не нашел нигде упоминания этой особенности функции bcmul(). Возможно, есть какое-то объяснение в зависимости от платформы или сервера.
Тестировано на php 4.4, 5.1; Linux, Win; apache 1, 2 - короче без разницы.
Есть какие-нибудь выходы из такой ситуации?