![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 91
一念之卓
这个作者很懒,什么都没留下…
展开
-
java大数运算详解【其十】大数除法之Burnikel-Ziegler除法算法
2、Burnikel-Ziegler除法算法(分块循环带余数试商法算法,简称分块试商法)/** *使用Burnikel-Ziegler算法计算{@code this / val}. * @param val 除数 * @return {@code this / val} */ private BigInteger divideBurnikelZiegler(BigInteger val) { return divideAndRemainde...原创 2020-12-17 01:39:13 · 875 阅读 · 0 评论 -
java大数运算详解【其九】大数除法之试商法(Knuth除法)核心算法
核心算法: /** * 该MutableBigInteger除以除数div。 * 商将被放置到提供的quotient对象中并将余数对象返回(当needRemainder值true)。 */ private MutableBigInteger divideMagnitude(MutableBigInteger div, MutableBigInteger quot...原创 2020-12-17 01:38:35 · 1262 阅读 · 0 评论 -
java大数运算详解【其八】大数除法
四、大数除法/** * 返回值为{@code (this / val)}的大型整数。 * * @param 除数 * @return {@code this / val} * @throws ArithmeticException 如果{@code val}值零。 */ public BigInteger divide(BigInteger val) { if (val.mag.length < BURNIKEL...原创 2020-12-17 01:37:45 · 2205 阅读 · 0 评论 -
java大数运算详解【其七】大数乘法之Karatsuba乘法和ToomCook3乘法
4、Karatsuba乘法(二分展开式乘法)/** * 使用Karatsuba乘法算法将两个大整数相乘。 * 这是一种递归的分治算法,与多聚类算法中通常使用的“小学”算法相比,它在处理大数问题时效率更高。 * 如果进行乘法的数组长度为n,“小学”算法的渐近O(n ^ 2)的复杂性。 * 相比之下,Karatsuba算法的复杂性O(n ^(log2(3))),或O(n ^ 1.585)。 * 在对过程进行评估时,它通过执行3次乘法而不是4次来实现这种性能提...原创 2020-12-17 01:37:03 · 1179 阅读 · 2 评论 -
java大数运算详解【其六】大数乘法之单位乘法和经典乘法
2、单位乘法 private static BigInteger multiplyByInt(int[] x, int y, int sign) { if (Integer.bitCount(y) == 1) {//移位优化 return new BigInteger(shiftLeft(x,Integer.numberOfTrailingZeros(y)), sign); } int xlen = x.length;...原创 2020-12-16 21:44:09 · 319 阅读 · 0 评论 -
java大数运算详解【其五】大数乘法之平方算法之ToomCook3平方算法
1.3、ToomCook3平方算法(三分展开式算法) /** * 使用3路Toom-Cook平方算法平方一个大整数。 * 当两个数字都大于某一阈值时(实验发现),应该使用它。 * 它是一种递归分治算法,其渐近性优于squareToLen和squareKaratsuba算法。 */ private BigInteger squareToomCook3() { int len = mag.length; // k是...原创 2020-12-16 21:42:46 · 822 阅读 · 1 评论 -
java大数运算详解【其四】大数乘法之平方算法之Karatsuba平方算法
1.2、Karatsuba平方算法(二分展开式算法) /** * 使用Karatsuba平方算法平方一个大整数。 * 当两个数字都大于某一阈值时(实验发现),应该使用它。 * 它是一种递归分治算法,其渐近性优于squareToLen算法。 */ private BigInteger squareKaratsuba() { int half = (mag.length+1) / 2; BigInteger xl ...原创 2020-12-16 21:41:25 · 1022 阅读 · 0 评论 -
java大数运算详解【其三】大数乘法之平方算法之按位二次展开式算法
所有解释都是最基本的,没有过多赘述,如若不懂静心思考。 1.1、按位二次展开式算法 /** * 将整型数组x的内容平方,结果放入整型数组z中,x的内容不变。 */ private static final int[] squareToLen(int[] x, int len, int[] z) { int zlen = len << 1; if (z == null || z.length < zlen)...原创 2020-12-16 21:39:25 · 483 阅读 · 0 评论 -
java大数运算详解【其二】大数乘法
这只是大数乘法的一部分,其支部此处不涉及,在下节再讲。三、大数乘法/** * 返回值为{@code (this * val)}的大型整数。 * * @implNote 当{@code val == this}时,实现可以提供更好的算法性能。 * * @param 乘数。 * @return {@code this * val}. */ public BigInteger multiply(BigInteger val) {...原创 2020-12-16 21:34:55 · 594 阅读 · 0 评论 -
java大数运算详解【其一】大数加减法
一、大数加法/** * 返回值为{@code (this + val)}的大型整数。 * * @param 加数。 * @return {@code this + val}. */ public BigInteger add(BigInteger val) { if (val.signum == 0) return this; if (signum == 0) ret...原创 2020-12-16 21:29:02 · 1501 阅读 · 0 评论 -
用单精度浮点模拟双精度的运算,实现扩展浮点精度的算法
实际上,任何精度的浮点运算也可以像BigInteger那样计算,可以用多个浮点数据表示更高精度的浮点数据。而这就要求实现带余数的浮点四则运算。带余数的浮点四则运算的定义:加法和减法,余数和结果的和能精确表示运算值。乘法和除法,余数和结果必须同号,对于乘法,余数和结果的和能精确表示运算值,而对于除法,余数就是原来的意思。不多解释,代码如下:(可能存在错误)#include <iostream>#include <xmmintrin.h>using na.原创 2020-11-04 22:20:41 · 1694 阅读 · 0 评论 -
整型和浮点类型的转换,int与float,double互转的快速实现(在没有对应的汇编指令情况下)
如果没有类型转换对应的汇编指令,我们可以用浮点加法来完成整型和浮点类型的互转。如果有对应的汇编指令,调用之明显更简单高效,然而有些情况下类型转换会溢出,这要注意,计算机不会检查溢出而返回错误结果。一般来说,一次整型和浮点类型的互转的消耗和浮点加法一样,实际就是用浮点加法实现的类型转换。代码如下(不解释):typeconvert.h#include <stdint.h>//以下所有实现经过了严格测试,可以保证无误。其中,标准实现不会溢出,而用指令转换可能溢出。/** * 转原创 2020-09-23 16:56:19 · 2001 阅读 · 0 评论 -
定点运算及最优三角函数算法(不使用浮点计算)精度18位二进制小数
内嵌汇编代码:#include "r_math.h"/*** 以下所有函数都是对定点型的运算,该定点型的值乘以10000再以整型来存储。*//*** 将real转化为int,得到其整数部分。*/__declspec(naked) int __fastcall r_int(real i){ _asm{ mov edx,ecx; ...原创 2019-11-16 18:02:29 · 1630 阅读 · 0 评论 -
最优开立方算法(三次牛顿迭代)C/C++
#define CBRT_cbrt(a) cbrt(*(uint64_t*)&a)double cube[2048];double cbrt(uint64_t a){//最优开立方算法 double x; unsigned int exp; if(a==0)return 0.0; exp=((*(uint64_t*)&a)>>...原创 2019-10-06 20:23:00 · 2174 阅读 · 0 评论