php高精度数值计算

/**
 * bcadd — 将两个高精度数字相加
 * bccomp — 比较两个高精度数字,返回-1, 0, 1
 * bcdiv — 将两个高精度数字相除
 * bcmod — 求高精度数字余数
 * bcmul — 将两个高精度数字相乘
 * bcpow — 求高精度数字乘方
 * bcpowmod — 求高精度数字乘方求模,数论里非常常用
 * bcscale — 配置默认小数点位数,相当于就是Linux bc中的”scale=”
 * bcsqrt — 求高精度数字平方根
 * bcsub — 将两个高精度数字相减
 *
 * @m 第一个数值
 * @n 第二个数值
 * @x 方法,比如;add,sub等
 * @scale 小数点位数。根据需求更改即可
 */
function calc($m,$n,$x,$scale){
    $errors=array(
        '被除数不能为零',
        '负数没有平方根'
    );
    switch($x){
        case 'add':
            $t=bcadd($m,$n,$scale);
            break;
        case 'sub':
            $t=bcsub($m,$n,$scale);
            break;
        case 'mul':
            $t=bcmul($m,$n);
            break;
        case 'div':
            if($n!=0){
                $t=bcdiv($m,$n);
            }else{
                return $errors[0];
            }
            break;
        case 'pow':
            $t=bcpow($m,$n);
            break;
        case 'mod':
            if($n!=0){
                $t=bcmod($m,$n);
            }else{
                return $errors[0];
            }
            break;
        case 'sqrt':
            if($m>=0){
                $t=bcsqrt($m);
            }else{
                return $errors[1];
            }
            break;
    }
    return $t;
}

 

你可能感兴趣的:(php高精度数值计算)