我最近学得很快,但我有一个无法找到答案的基本问题
我想得到类似的东西
var a:Int = 3
var b:Int = 3
println( pow(a,b) ) // 27
Run Code Online (Sandbox Code Playgroud)
但pow函数只能使用double数,它不能用整数运算,我甚至无法通过Double(a)或a.double()等函数将int转换为double.
为什么它不提供整数的幂?它肯定会返回一个没有歧义的整数!为什么我不能将整数转换为double?它只是改变3到3.0(或3.00000 ...无论如何)
如果我有两个整数并且我想进行电源操作,我该怎样才能顺利完成?
谢谢!
我们都知道0 0是不确定的.
但是,javascript说:
Math.pow(0, 0) === 1 // true
Run Code Online (Sandbox Code Playgroud)
和C++说同样的话:
pow(0, 0) == 1 // true
Run Code Online (Sandbox Code Playgroud)
为什么?
我知道:
>Math.pow(0.001, 0.001)
0.9931160484209338
Run Code Online (Sandbox Code Playgroud)
但为什么不Math.pow(0, 0)
抛出错误呢?或者也许NaN
会比...更好1
.
Java中有没有其他方法可以计算整数的幂?
我Math.pow(a, b)
现在使用,但它返回一个double
,这通常是很多工作,并且当你只想使用int
s 时看起来不那么干净(电源也将总是导致int
).
有没有a**b
像Python 一样简单的东西?
任何人都知道乘法运算符是否比使用Math.Pow方法更快?喜欢:
n * n * n
Run Code Online (Sandbox Code Playgroud)
VS
Math.Pow ( n, 3 )
Run Code Online (Sandbox Code Playgroud) 我实现了这个功能,power()
这需要两个参数a
和b
并计算b.
typedef long long int LL;
LL power(int a,int b)
{
int i = 1;
LL pow = 1;
for( ; i <= b ; ++i )
pow *= a;
return pow;
}
Run Code Online (Sandbox Code Playgroud)
鉴于:a b属于范围long long int
.
问题:如何降低算法的时间复杂度?
我需要从pow(a,b)
整数中得到结果(a和b都是整数).目前(int) pow( (double)a, (double)b)
包含的计算是错误的.也许有人可以帮助一个函数,用整数执行pow(a,b)并返回一个整数?
但这里有一个奇怪的部分:我使用Geany(和g ++/gcc编译器)在Linux中创建了我的脚本,并且只pow(a,b)
编译了脚本并且工作正常.但在大学里我有Dev-C++(和MS Windows).在Dev-C++中,脚本没有使用错误[Warning] converting to
int' 编译double'
我需要在Windows(和Mingw编译器)下使这个scrpit工作.
提前致谢,
-skazhy
我知道java.lang.Math中提供了一组静态方法来执行某些操作(sum
,difference
,multiply
,increment
,decrement
,negate
,toInt
),抛出ArithmeticException
溢出.
电力有类似的东西吗?
我想问下面代码的时间复杂度.是O(n)?(Math.pow()的时间复杂度是否为O(1)?)一般来说,Math.pow(a,b)是否具有时间复杂度O(b)或O(1)?提前致谢.
public void foo(int[] ar) {
int n = ar.length;
int sum = 0;
for(int i = 0; i < n; ++i) {
sum += Math.pow(10,ar[i]);
}
}
Run Code Online (Sandbox Code Playgroud) float pow(float base, int iexp )
在C++ 11中删除了重载的函数,现在pow
返回一个double
.在我的程序中,我计算了很多这些(单精度),我对如何做到最有效的方式感兴趣.
是否有一些特殊功能(在标准库或任何其他)具有上述签名?
如果没有,在任何其他操作(将其他所有内容都投入)或者转换为使用重载函数之前,是否更好(在单精度方面的性能方面)显式地pow
转换结果?float
double
iexp
float
float pow(float base, float exp)
编辑:为什么我需要float
和不使用double
?
主要原因是RAM - 我需要数十或数百GB,因此这种减少是巨大的优势.所以我需要float
得到float
.现在我需要最有效的方法来实现这一目标(减少演员阵容,使用已经优化的算法等).
如何以更好的运行时间计算功率?
例如2 ^ 13.
我记得在某个地方看到它与以下计算有关:
2 ^ 13 = 2 ^ 8*2 ^ 4*2 ^ 1
但我看不出如何计算等式右边的每个分量然后乘以它们会对我有所帮助.
有任何想法吗?
编辑:我的意思是任何基础.您在下面提到的算法,特别是"通过平方展示",如何改善运行时/复杂度?