There is an error in the PHP BCMath function bcmul. It is still present in PHP 5.5.7, the latest stable version at the time of this writing.
(PHP 5.5 BCMath recmul.c), :
void
bc_multiply (bc_num n1, bc_num n2, bc_num *prod, int scale TSRMLS_DC)
{
bc_num pval;
int len1, len2;
int full_scale, prod_scale;
len1 = n1->n_len + n1->n_scale;
len2 = n2->n_len + n2->n_scale;
full_scale = n1->n_scale + n2->n_scale;
prod_scale = MIN(full_scale,MAX(scale,MAX(n1->n_scale,n2->n_scale)));
_bc_rec_mul (n1, len1, n2, len2, &pval, full_scale TSRMLS_CC);
pval->n_sign = ( n1->n_sign == n2->n_sign ? PLUS : MINUS );
pval->n_value = pval->n_ptr;
pval->n_len = len2 + len1 + 1 - full_scale;
pval->n_scale = prod_scale;
_bc_rm_leading_zeros (pval);
if (bc_is_zero (pval TSRMLS_CC))
pval->n_sign = PLUS;
bc_free_num (prod);
*prod = pval;
}
. "" .
, prod_scale. bcmul("0.3", "0.2", 4), , : prod_scale = MIN(2,MAX(4,MAX(1,1)));, prod_scale 2.
, , , . BCMath PHP (, . 63-98 PHP 5.5 BCMath doaddsub.c), .
PHP (# 66364).