我目前正试图弄清楚如何使用PHP中的任意精度数字.所以我想我的第一个问题是究竟什么是任意精度数学.我试着谷歌搜索一个很好的定义,但由于某种原因,没有人可以用简单的语言.
其次,PHP中的BCMath和GMP库有什么区别?我听说GMP的API是"更新鲜",但是我很高兴.一个更好吗?
我最后的问题是BCMath/GMP需要什么类型的数字.显然它需要字符串形式的正常整数(例如"5.34"),但我已经看到BCMath函数直接用于表示常规整数的八位字节字符串的实现(例如"\ x12\x23\x45\x67"),其中我听说被称为"bigint",但谷歌再也没有给我带来任何好处.
我希望能够将大的int转换为完整的字符串派生词.
例如.
$bigint = 9999999999999999999;
$bigint_string = (string) $bigint;
var_dump($bigint_string);
Run Code Online (Sandbox Code Playgroud)
输出
string(7) "1.0e+19"
Run Code Online (Sandbox Code Playgroud)
但是我需要
string(19) "9999999999999999999"
Run Code Online (Sandbox Code Playgroud)
请不要告诉我,我最初应该将$ bigint值设置为字符串.这不是一种选择.我真的被卡住了,不知道它是否可能?
php:int()bigint类型的等效函数是什么?(int()削减大数到2147483647)?
例:
$bigint1="12312342306A_C243";
$bigint1=(int)$bigint1;//2147483647
Run Code Online (Sandbox Code Playgroud)
但我希望它是12312342306.
如何使用a%b大整数?喜欢
...
BigInteger val = new BigInteger("1254789363254125");
...
boolean odd(val){
if(val%2!=0)
return true;
return false;
...
Run Code Online (Sandbox Code Playgroud)
Eclipse表示,对于BigInteger,运算符%未定义.
有任何想法吗?
如何转换"大"十六进制数字(字符串格式):
EC851A69B8ACD843164E10CFF70CF9E86DC2FEE3CF6F374B43C854E3342A2F1AC3E30C741CC41E679DF6D07CE6FA3A66083EC9B8C8BF3AF05D8BDBB0AA6CB3EF8C5BAA2A5E531BA9E28592F99E0FE4F95169A6C63F635D0197E325C5EC76219B907E4EBDCD401FB1986E4E3CA661FF73E7E2B8FD9988E753B7042B2BBCA76679
到十进制数字(字符串格式):
166089946137986168535368849184301740204613753693156360462575217560130904921953976324839782808018277000296027060873747803291797869684516494894741699267674246881622658654267131250470956587908385447044319923040838072975636163137212887824248575510341104029461758594855159174329892125993844566497176102668262139513
不使用BigIntegerClass(因为我的应用程序应该支持没有.NET Framework 4的机器)?
API文档说
有关溢出的规范中的所有细节都将被忽略,因为BigIntegers的大小可以根据操作的结果进行调整.
这是否意味着假设您有足够的可用内存,BigInteger永远不会溢出?如果是这样的话,为什么我们让一些"类型"溢出而一些不会?
随着语言的发展,它是否会偏向程序员隐藏溢出机制的类型?
在Java中,大多数基本类型都是有符号的(一位用于表示+/-),因此当我超出类型的限制时,我会得到意想不到的结果,比如负数.
有没有比使用BigInteger更好的解决方案,因为BigInteger存在性能问题,您需要使用类方法进行基本算术而不是语言运算符(废弃可读性)?
在红宝石中,一些大数字大于无穷大.通过二进制搜索,我发现:
(1.0/0) > 10**9942066.000000001 # => false
(1.0/0) > 10**9942066 # => true
RUBY_VERSION # => "2.3.0"
Run Code Online (Sandbox Code Playgroud)
为什么是这样?10 9942066有什么特别之处?它似乎不是像9999999这样的任意数字,它不接近任何两个的幂(它与2 33026828.36662442大致相等).
为什么红宝石的无限无限?10 9942066如何参与?
我现在意识到,任何大于10 9942066的数字都会溢出到无穷大:
10**9942066.000000001 #=> Infinity
10**9942067 #=> Infinity
Run Code Online (Sandbox Code Playgroud)
但这仍然留下了一个问题:为什么10 9942066?