- 多种开发语言高精度计算类,主要用于浮点数据计算精度问题,算法核心是一样的。
- 支持使用计算公式,如同计算器一样
- 运算功能有: 加(+)、减(-)、乘(*)、除(/)、取模(%)、幂(^)、求方根(~)
- PHP
BcMath::counter('100 + 200', 100);
- JS
bcmath('100 + 200', 100)
- JAVA
BcMath.counter(formula, 100);
函数提供了两个参数
- 计算公式
- 计算小数位数
高精度计算理论上可以计算无限长度的数值运算,但在程序中需要做过多的处理,目前各语言计算的长度不尽相同,计算过程中会把长的原计算数值拆分为若干个最大可计算的长度的小数值并保存在数组中。
因为数据的索引值是以整型或长整型,所以计算总长度=最小计算的长度*数组索引总长度
- 非乘法 最小计算长度 = 数组索引最大数 - 1
- 乘法 最小计算长度 = ( 数组索引最大数 - 1 )/ 2
如果数组索引最长度是32位,则最小计算长度是9位数,那最大的计算长度 = 9 * 4294967296 = 38654705664,这长度已经非常大了,以目前的计算器硬件来计算且得花点时间了。
除了求方根没有合适的算法外,其它几个运算速度还可以。求方根使用的是牛顿迭代法,计算比较大的方根值时会很慢,具体的要看硬件与语言了,一般求两位数内的方根速度还可以,比如求 987983452 开 20 次方的根。
高精度计算已经进行一定时间的随机测试准确性,可用于计算器模块或测试各语言的性能,毕竟这也算是一个算法处理。
如果你有更好的算法可留言分享下。