/**
* 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;
}