php BC math 高精度數學函式

2021-07-01 20:01:53 字數 3741 閱讀 6233

php 為任意精度數學計算提供了二進位制計算器(binary calculator),它支援任意大小和精度的數字,以字串形式描述。

自 php 4.0.4 以來,libbcmath 都繫結在 php 內部。本擴充套件不需要其它外部庫的支援。

本類函式僅在 php 編譯時配置了 --enable-bcmath 時可用。在 php 3 中,本類函式僅在 php 編譯時沒有

配置 --disable-bcmath 時可用。

php 的 windows版本已經內建該擴充套件模組的支援。無需載入任何附加擴充套件庫即可使用這些函式。

這些函式的行為受 php.ini 的影響。

** 1. bc 數學庫配置選項

名稱預設值

可修改範圍

更新記錄

bcmath.scale

"0"php_ini_all

自 php 5.0.0 起可用。

有關 php_ini_* 常量進一步的細節與定義參見

附錄 g。

以下是配置選項的簡要解釋。

bcmath.scale

integer

所有 bcmath 函式中十進位制數字的數目。參見bcscale()

本擴充套件模組未定義任何資源型別。

本擴充套件模組未定義任何常量。

目錄bcadd -- add two arbitrary precision numbers

bccomp -- compare two arbitrary precision numbers

bcdiv -- divide two arbitrary precision numbers

bcmod --  get modulus of an arbitrary precision number

bcmul -- multiply two arbitrary precision number

bcpow --  raise an arbitrary precision number to another

bcpowmod --  raise an arbitrary precision number to another, reduced by a specified modulus

bcscale --  set default scale parameter for all bc math functions

bcsqrt --  get the square root of an arbitrary precision number

bcsub --  subtract one arbitrary precision number from another

bcadd()

<?php

$a =

'1.234'

;$b

= '5'

;echo

bcadd($a

, $b

);     

// 6

echo

bcadd($a

, $b, 4

);  

// 6.2340

?>

bccomp()

<?php

echo

bccomp

('1'

, '2'

) .

"\n"

;   

// -1

echo

bccomp

('1.00001'

, '1', 3

); // 0

echo

bccomp

('1.00001'

, '1', 5

); // 1

?>

bcdiv()

<?php

echo

bcdiv

('105'

, '6.55957', 3

);  

// 16.007

?>

bcmod()

<?php

echo

bcmod

('4'

, '2'

); // 0

echo

bcmod

('2'

, '4'

); // 2

?>

bcmul()

<?php

echo

bcmul

('1.34747474747'

, '35', 3

); // 47.162

echo

bcmul

('2'

, '4'

); // 8

?>

bcpow()

<?php

echo

bcpow

('4.2'

, '3', 2

); // 74.08

?>

bcpowmod()

<?php

$a =

bcpowmod($x

, $y

, $mod

);$b

= bcmod

(bcpow($x

, $y

), $mod

);// $a and $b are equal to each other.

?>

bcscale()

<?php

// default scale : 3

bcscale(3

);echo

bcdiv

('105'

, '6.55957'

); // 16.007

// this is the same without bcscale()

echo

bcdiv

('105'

, '6.55957', 3

); // 16.007

?>

bcsqrt()

<?php

echo

bcsqrt

('2', 3

); // 1.414

?>

bcsub()

<?php

$a =

'1.234'

;$b

= '5'

;echo

bcsub($a

, $b

);     

// -3

echo

bcsub($a

, $b, 4

);  

// -3.7660

?>

高精度 數樓梯

洛谷 p1255 數樓梯 題目描述 樓梯有n階,上樓可以一步上一階,也可以一步上二階。編乙個程式,計算共有多少種不同的走法。分析 只用稍微用用腦子就可以看出,這是一道斐波那契數列的問題 不過省略了開頭的1,即這裡的數列為 12358 注意n 0,1,2的情況。然而這題需要高精所以寫的特別長 incl...

高精度 數樓梯

題目 樓梯有n階,上樓可以一步上一階,也可以一步上二階。編乙個程式,計算共有多少種不同的走法。乙個數字,樓梯數。走的方式幾種。輸入 1 複製 4輸出 1 複製 5說明 提示 60 n 50 100 n 5000 原本一看,這不是 斐波那契數列 嗎,直接公式下去寫完,dp i dp i 1 dp i ...

高精度數演算法 加法

基本資料型別 長度有限。所以大的資料被單獨拿出來。高精度演算法就是模擬我們在紙上的運算。要死要死要死 我忘記了。乙個空間有剩餘的int後面是自帶補0的啊。還有平時沒有注意到的三目運算子 length str1 str2 str1 str2 上 include include define max 1...