js、php、java、golang、python在大整数加减乘除运算的差异与不同
有时我们想要进行数学运算,其中涉及非常大的整数计算,这些计算超出了所有可用原始数据类型的限制。例如,100 的阶乘包含 158 位数字,因此我们不能将它存储在任何可用的原始数据类型中,今天我们分享一下js、php、java、golang、python在大整数加减乘除运算的差异与不同。
JAVASCRIPT
JavaScript在ES2020中新增了BigInt类型,可以直接用于大整数运算。示例:
<script type="text/javascript"> const a = BigInt("123456789123456789123456789123456789"); const b = BigInt("987654321987654321987654321987654321"); const sum = a + b; const prod = a * b; const div = a / b; const mod = a % b; alert(sum); </script>
在更早版本中需要使用第三方库,如Long.js。
php
PHP需要使BcMath扩展或Arbitrary precision mathematics函数库来实现大整数运算。示例:
<?php $a = "123456789123456789123456789123456789"; $b = "987654321987654321987654321987654321"; $sum = bcadd($a, $b); $prod = bcmul($a, $b); $div = bcdiv($a, $b); $mod = bcmod($a, $b);PHP的内置整数类型无法进行大整数运算。
JAVAJava使用BigInteger类来表示和操作大整数。示例:
import java.math.BigInteger; public class HelloWorld { public static void main(String []args) { BigInteger a = new BigInteger("123456789123456789123456789123456789"); BigInteger b = new BigInteger("987654321987654321987654321987654321"); BigInteger sum = a.add(b); BigInteger prod = a.multiply(b); BigInteger div = a.divide(b); BigInteger mod = a.mod(b); System.out.println(sum); } } //按快捷键CTRL+K让AI帮你编写或修改代码
Golang
Golang使用内置的big.Int类型直接进行各种大整数运算。示例:
package main import ( "fmt" "math/big" ) func main() { a := big.NewInt(2188824200011112223) b := big.NewInt(2131234354353454354) sum := big.NewInt(0).Add(a, b) prod := big.NewInt(0).Mul(a, b) div := big.NewInt(0).Div(a, b) mod := big.NewInt(0).Mod(a, b) fmt.Println(sum) fmt.Println(prod) fmt.Println(div) fmt.Println(mod) }
Python使用decimal模块进行大整数运算。示例:
from decimal import Decimal a = Decimal("123456789123456789123456789123456789") b = Decimal("987654321987654321987654321987654321") sum = a + b prod = a * b div = a / b mod = a % b
Python的int类型无法进行准确的大整数运算。
总结来说,JavaScript、Java、Golang和Python都有较好的大整数支持,PHP相对较弱,需要依赖扩展库。各语言的实现思路都是使用字符串模拟大整数运算。
Golang的大整数运算通过其大整数类型big.Int的指针优化,性能较好。JavaScript的BigInt也是一种原生类型,易于使用。
网友评论0