我目前正在尝试弄清楚如何使用PHP中的任意推荐数字.因此,我想我的第一个问题将是任意精神数学到底是什么.我尝试搜索一个很好的定义,但由于某些原因,没有人可以用足够简单的单词将其放置. 第二,PHP中的BCMATH和GMP库之间有什么区别?我听说说GMP的API是"新鲜的",但是IDK.一个更好吗? 我的最后一个问题是BCMATH/GMP采用哪种类型的数字.显然,它以字符串形式(例如" 5.34")需要正常的整数,但是我已经看到了实现了BCMATH函数直接与代表常规整数的八位字符串一起使用(例如" \ x12 \ x23 \ x45 \ x67") '听到被称为" bigint",但Google再次对我来说一无所获. 解决方案 任意推荐数学到底是什么? 任意精度算术又称" Bignum Math",它引入了一种对数字进行算术操作的方式,该数字仅受可用内存量的限制.这是由固定精度算术出发的,该算术由主机系统的CPU/ALU提供,其中表示的最大大小/精度是表示寄存器位数的
以下是关于 biginteger 的编程技术问答
我正在为网站目的工作大量数字,我需要长时间的计算.当我回声时,我没有正确的输出. 示例 // A random number $x = 100000000000000000000000000; $x = number_format($x); echo "The number is: $x
"; // Result: 100,000,000,000,000,004,764,729,344 // I'm not getting the value assigned to $x 解决方案 实际上,对于PHP标准整数而言,您的电话号码太大了. PHP使用64位整数可以在范围内保持值-9222372036854775808(PHP_INT_MIN) 到+9223372036854775807(PHP_INT_MAX). 您的电话号码约为87位,太多了. 如果您确实需要如此大的数字,则应使用手册中的PHP BC数学类型: http:http:http:htt
如何在PHP中使用大数字? 例如 (6*27^0+17*27^1+11*27^2+18*27^3+25*27^4+4*27^5)^65537 解决方案 您可以选择 bcmath 与大数字一起工作. 其他解决方案 GMP实际上比BCMATH更快,如果您安装了它.如果您尚未安装BCMATH或GMP,则可以使用 phpseclib的pure-php biginteger实现. . . 该实施使用GMP或BCMATH(如果可以按该顺序),则使用它自己的内部实施. 其他解决方案 有很多选择: GMP扩展 bcmath扩展 litipk php bignumbers( https://github.com/litipk/litipk/php-bignumbers ) 繁荣的数字( http://flourishlib.com/docs/docs/fnumber ) )
我希望能够将大型INT转换为其完整的字符串衍生物. 例如. $bigint = 9999999999999999999; $bigint_string = (string) $bigint; var_dump($bigint_string); 输出 string(7) "1.0e+19" 但我需要 string(19) "9999999999999999999" 请不要告诉我我最初应该将$ bigint值设置为字符串.那不是一个选择.我真的被困,不知道是否可能吗? 解决方案 您实际上应该确保键入含义: $bigint = 9999999999999999999; 不是php整数,而是浮动: float(1.0E+19) 如果您愿意完成 $bigint = (int) 9999999999999999999; 您实际上会设置一个整数,但这不是您可能预期的数字: int(-8446744073709551616)
PHP中有Biginteger课程吗?如果是这样,我该如何访问或使用它? 解决方案 希望有帮助的链接: /a> /a> 编辑:Math_biginteger 示例来自 >: 实现任意精确整数算术库.使用GMP或BCMATH(如果有),以及内部实现,否则. add($b); echo $c->toString(); // outputs 5 ?> 其他解决方案 即使这个问题是旧的,当谷歌搜索BigInteger PHP>时,它是第一个结果,因此,对于任何有兴趣的人,我开源了一个名为砖\ \数学提供BigInteger,BigDecimal和BigRational类. 用法 use
我知道我可以有条件地使用perl中的模块,但是"布拉格马"呢?我的测试表明,use bigint在perl中的数学可能要慢得多,我只需要处理64位整数,所以我只想在没有使用64位整数支持的perl构建时使用它,我还知道如何检查使用Config模块. 我尝试了eval和BEGIN块的各种事情,但无法做出有条件使用BigInt的方法.我知道我可以使用Math::BigInt,但是我不能在bigint和64位案例中使用单个编码器. 解决方案 这实际上可以正常工作: use Config; BEGIN { if (! $Config{use64bitint}) { require bigint; bigint->import; } } 不同的编译时间之间的相互作用很复杂(也许我会回来并尝试解释),但可以说,由于这里没有字符串评估,因此Bigint集合的标志将在其余部分中持续存在您放置在内部块的文件或块. 其他解决方案 您可以采取霍布斯的答案
问题 i具有转换为十六进制字符串的A byte[],然后像BigInteger.Parse(thatString,NumberSyles.Hexnumber)那样解析该字符串. 这似乎很浪费,因为Biginteger能够接受一个字节[],只要两者的补充被解释了. 一个工作(效率低下)示例 根据msdn 最后一个字节中最重要的位应该为零,以使以下十六进制为正数.以下是具有此问题的十六进制号的示例: byte[] ripeHashNetwork = GetByteHash(); foreach (var item in ripeHashNetwork) { Console.Write(item + "," ); } // Output: // 0,1,9,102,119,96,6,149,61,85,103,67,158,94,57,248,106,13,39,59,238,214,25,103,246 // Convert to He
例如,二进制中的123456789是111010110111100110100010101.连续1位的最大数量为4.我有效地解决了非常大量的数量(一百万块甚至更多).我想到了: def onebits(n): ctr = 0 while n: n &= n >> 1 ctr += 1 return ctr n &= n >> 1同时切断了连续1位条纹的每条连胜的顶部1位.我重复一遍,直到每次连续都消失,并计算了它采取了多少个步骤.例如(全二进制): 11101011 (start value) -> 1100001 -> 100000 -> 0 这是三个步骤,因为最长的条纹具有三个1位. 对于随机数字,条纹很短,这是很快(在该基准中).但是,对于长条纹的数字,最多需要O(b²)时间,其中b的大小与n的大小相同.我们可以做得更好吗? 解决方案 是的,我们可以在O(b log
我已经写了C ++的Biginteger类,该课程应该能够在所有数字上进行任何大小的操作.目前,我正在尝试通过比较现有算法和测试它们最效果的数字来实现非常快速的乘法方法,并且我遇到了非常出乎意料的结果.这就是结果: karatsuba: 14.178 seconds long multiplication: 0.879 seconds 维基百科告诉我 据得出,对于足够大的N,Karatsuba的算法将比Longhand乘法更少的偏移和单位添加,即使其基本步骤使用的添加和移动比直接的公式多.但是,对于n的少量值,额外的偏移和添加操作可能会使它的运行速度慢于长距离方法.正回报的点取决于计算机平台和上下文.根据经验,当倍数大于320–640位时,Karatsuba通常会更快. 由于我的数字至少长1500位,这是非常出乎意料的,因为Wikipedia表示Karatsuba应该更快地运行.我相信我的问题可能是在我的添加算法中,但是我看不出如何使其更快,因为它已经在o
我在辩论是使用BigDecimal和Biginteger还是仅仅是BigDecimal,以使我的生活更轻松,而不是来回转变.仅在资源方面使用bigdecimal是否有缺点? 仅使用原始数据类型和biginteger或只能使我的生活更轻松而来回转换? 解决方案 来自:/a> 请注意,一个巨大的数字本质上是一个围绕一个"记住小数点在哪里"的biginteger的包装纸. 由于我们习惯于处理数字的方式,就像人类一样,与整数相比,用手工计算非智能者时,我们可能必须"思考更多"(例如,我们可能已经通过心脏加快某些计算的速度,但可能不是0.7倍表).但是对于计算机的实施,操纵非智能者的努力比整数没有更多的努力,而且总体而言,BigDecimal的方法倾向于与BigInteger上的类似方法相似. . 其他解决方案 我知道您的问题的标题" BigDecimal vs. Biginteger和BigDecimal"的标题"但是您的问题之一就是"只使用原始数据类型和Bi
前言 看来这是几个堆叠问题的重复性,但我的情况(可能)略有独特. 我的情况 我有一个字典. 键是 string , value 是 integer . . 我希望python脚本随机选择 n 键的数量. 值是选择它的可能性.密钥的值越高,随机选择键的机会就越高. 我的解决方案 因此,我使用加权随机. DICT_VAR= {'best':308281009, 'good':7066325, 'meh':26884, 'bad':71, 'terrible':16, 'never':0} list_var = [] for i in DICT_VAR.keys(): list_var.extend([i]*DICT_VAR[i]) print random.sample(list_var, 2) # get 2 random choice I suppose 问题(捕获) 您可能会注意到,字典中的价值可以是令人难以置信的大(它可
我遇到了在MySQL上通过PDO 将大整数存储在BIGINT列中的问题 如果我运行此测试: $number = "30123456789"; var_dump($number); //prints string(11) "30123456789" $new_number = (int)$number; var_dump($new_number); //prints int(30123456789) 到目前为止很好... 如果我直接在mySQL中运行此SQL: update my_table set bigint_field = 30123456789 where id_field = 1 一切正常... 当我尝试通过PDO保存该数字时,问题出现了,我将问题减少到了这一行: : //parameterized query //update my_table set bigint_field = :bigint_field where id_f
将50位字符串转换为Java中的Biginteger的最佳方法是什么?它没有一个值(字符串)方法,我不能转换为长时间,因为它太小. 解决方案 它确实具有 BigInteger(String) 构造函数: - ) String S = "12345678901234567890123456789012345678901234567890"; BigInteger bi = new BigInteger(S); 其他解决方案 ... 怎么样 BigInteger bi = new BigInteger(my50DigitString); 所有这些xxx.valueof()方法是构造函数的替代方案,因为它们允许返回共享的缓存副本.根据定义,构造函数每次返回新实例.因此,valueof()是一个不错的优化,但是设计师显然并没有发现提供一个biginteger.valueof(string)方法很有趣.在这种情况下,您必须使用一个构造函数. 其他解决方案 Big
我已经开始使用.net 4 system.numerics.biginteger结构我遇到了一个问题. 我试图解析一个包含一个没有符号的十六进制数字的字符串(正).我得到一个负数. 例如,我做以下两个断言: Assert.IsTrue(System.Int64.Parse("8", NumberStyles.HexNumber, CultureInfo.InvariantCulture) > 0, "Int64"); Assert.IsTrue(System.Numerics.BigInteger.Parse("8", NumberStyles.HexNumber, CultureInfo.InvariantCulture) > 0, "BigInteger"); 第一个断言成功,第二个断言失败了.我实际上在BigInteger中获得-8而不是8. 问题似乎是我的十六进制从1位开始而不是0位开始(数字在8和F含义之间).如果我添加领先0,一切正常. 这是
作为我的BigDecimal库的一部分,我需要计算任何给定的非负整数的阶乘.因此,我使用.NET 4.0'S System.Numerics.BigInteger可以存储大量数字.这是我正在使用的功能: private BigInteger Factorial(BigInteger x) { BigInteger res = x; x--; while (x > 1) { res *= x; x--; } return res; } 它正在工作,但没有优化.现在我想使用并行计算,所以这是我尝试的:(我没有并行编程的经验) public BigInteger Factorial(long x) { BigInteger res = 1; ParallelLoopResult r = Parallel.For(2L, (x + 1), i =>
我正在尝试计算一些大数字.为了加快计算的速度,我想使用多线程.每个线程都应计算一个数字,最后计算一个总和. 我曾经看到了与SumThread和a Collector一起使用的东西,看起来如下: public BigInteger compute(int p) { Collector c = new Collector(p); for(T element : Collection bigCollection) { new SumThread(c) { @Override protected void doTheJob() { long big = someVeryComplexCalculation(element, ...); //n! receive(BigInteger.valueOf(big));
我有一个数据文件( csv ),带有 编辑:我尝试了评论中提出的实现,但这对我不起作用. csv 文件中的示例数据将是:77241756221441762028881402092817125017724447303212139981668021711613168152184106 解决方案 @Johne在他的回答中解释说,我们在使用熊猫阅读大数字时不会丢失任何信息.它们被存储为dtype=object,为了对它们进行数值计算,我们需要将这些数据转换为数值类型. 系列: 我们必须将map(func)应用于数据框中的系列: df['columnName'].map(int) 整个数据帧: 如果出于某种原因,我们的整个数据帧由dtype=object的列组成,我们查看applymap(func) 来自熊猫的文档: dataframe.applymap(func):将函数应用于旨在操作elementwise的dataFrame,即对datafram