高精度乘方一
来源:互联网 发布:淘宝店铺的收入 编辑:程序博客网 时间:2024/06/05 05:07
先说说整指数乘方,百度上搜到一个程序,效率很高,代码简洁:
int pow(int x,int n)
{
int temp(x),res(1);
while(n)
{
if(n&1)
{
res *= temp;
}
temp *= temp;
n>>=1;
}
return res;
}
把2^61代入运算,内存变化图是这样的:61的二进制形式是111101
res = 2 2 32 8192 536870912 2.305843009213693952E18
temp= 4 16 256 65536 4294967296 1.8446744073709551616E19
2.305843009213693952E18 是最终结果 除红色部分外有9次是关键乘法,前两个红色 2 2近似不占运算时间,后面红色1.8446744073709551616E19是冗余运算。
我的源程序和上述算法效率差不多,因构思不一样,也贴出来
Dim a(50) As Integer
i = 0
Do
yCzs3 = yCzs.Zx(1) Mod 2 ‘yCzs.Zx(1)中存放的是指数
If yCzs3 = 0 Then
yCzs.Zx(1) = yCzs.Zx(1) / 2
a(i) = 2
Else
yCzs.Zx(1) = yCzs.Zx(1) - 1
a(i) = 1
End If
yCzs3 = yCzs.Zx(1)
i = i + 1
Loop While yCzs.Zx(1) <> 1 '等于一退出 ’循环完成后a()的内存情况为:1 2 2 1 2 1 2 1 2
For j = i - 1 To 0 Step -1 ‘一共需要9次乘法
If a(j) = 2 Then
zCzs1 = myMULTIPLY(zCzs1, zCzs1) ’ zCzs1的初始值是2,myMULTIPLY()函数是大数乘
Else
zCzs1 = myMULTIPLY(zCzs1, zCzs2) ’ zCzs2的初始值是2
End If
Next
我的思路是这样的:((((((((2^2)*2)^2)*2)^2)*2)^2)^2)*2
int pow(int x,int n)
{
int temp(x),res(1);
while(n)
{
if(n&1)
{
res *= temp;
}
temp *= temp;
n>>=1;
}
return res;
}
把2^61代入运算,内存变化图是这样的:61的二进制形式是111101
res = 2 2 32 8192 536870912 2.305843009213693952E18
temp= 4 16 256 65536 4294967296 1.8446744073709551616E19
2.305843009213693952E18 是最终结果 除红色部分外有9次是关键乘法,前两个红色 2 2近似不占运算时间,后面红色1.8446744073709551616E19是冗余运算。
我的源程序和上述算法效率差不多,因构思不一样,也贴出来
Dim a(50) As Integer
i = 0
Do
yCzs3 = yCzs.Zx(1) Mod 2 ‘yCzs.Zx(1)中存放的是指数
If yCzs3 = 0 Then
yCzs.Zx(1) = yCzs.Zx(1) / 2
a(i) = 2
Else
yCzs.Zx(1) = yCzs.Zx(1) - 1
a(i) = 1
End If
yCzs3 = yCzs.Zx(1)
i = i + 1
Loop While yCzs.Zx(1) <> 1 '等于一退出 ’循环完成后a()的内存情况为:1 2 2 1 2 1 2 1 2
For j = i - 1 To 0 Step -1 ‘一共需要9次乘法
If a(j) = 2 Then
zCzs1 = myMULTIPLY(zCzs1, zCzs1) ’ zCzs1的初始值是2,myMULTIPLY()函数是大数乘
Else
zCzs1 = myMULTIPLY(zCzs1, zCzs2) ’ zCzs2的初始值是2
End If
Next
我的思路是这样的:((((((((2^2)*2)^2)*2)^2)*2)^2)^2)*2
0 0
- 高精度乘方一
- 高精度乘方
- 高精度阶乘、乘方排列组合
- POJ1001 Exponentiation【高精度乘方】
- 高精度乘方二
- poj 1001 高精度乘方 java
- uva784 Exponentiation (实数高精度乘方)
- sgu112 高精度大整数乘方
- poj 1001 Exponentiation 高精度乘方
- 大数乘方 求高精度幂 NOYJ155
- uva 748 Exponentiation 浮点数乘方运算 高精度水题
- 高精度计算(一)概念
- 大数(高精度)问题 【一】
- 计蒜客 加一 (高精度)
- 快速乘方
- 乘方问题
- 求乘方
- Java --乘方
- Linux 开启数据库的权限
- Android开发学习之路--RxAndroid之简单原理
- [每日一课】 Python官方文档--- 函数进阶
- linux crontab
- ItelliJ IDEA开发工具使用—创建一个web项目
- 高精度乘方一
- 用Newtonsoft将json串转为对象
- 简单说两条网站安全问题
- iOS学习- 22 Core Data by Tutorials - CH02
- sqlserver 死锁
- Docker如何build Tomcat镜像
- Android——第三方登录——新浪微博——获取用户信息——账户绑定
- 来自中午机房的1071
- C语言笔记系列(一)--概述