可以使用Math.Pow(10,n)吗?

我需要计算功率(10,n)

可以使用Math.Pow (10, n)吗?

或者我应该使用循环?

 for (int i = 0; i < n; i++){ x*=10; } 

哪一个更好? 为什么?

如果base和exponent都是整数,你可以考虑不使用Pow。 但即使在那种情况下,Pow通常更好,因为它更具可读性。 如果至少有一个是浮点值,请使用Pow。

如果指数是0.5,你应该使用Sqrt,如果指数是一个小整数(2,3,4),表示带乘法的公式更快,但可读性更低。

如果你想用整数指数实现快速取幂,那么Square-and-Multiply算法而不是简单的循环可能就是你想要的。 但在大多数情况下,Pow仍然更快。

对于整数,也许for循环比Math.Pow更快,它可能处理浮点数。 但我非常怀疑你的情况有多大差异(即使我不知道)。

但是如果你使用32位有符号整数,那么你只能为n <= 9存储10 ^ n的值。但是你可以通过将这九个(十)个幂存储在10中来获得速度(也许是可读性)数组。 这并不难:它们是(1),10,100,1000,....

如果需要为较大的n计算10 ^ n,则需要使用浮点数。 然后没有任何理由不使用Math.Pow 。 这是最快的,并且易于阅读。

Math.Pow更好。
这是一个经验法则 – 在99%的场景中,支持内置函数而不是自定义实现。 这使您的代码更清晰,节省了大量工作,并减少了错误的机会。

只有当你想到以不同的方式使用内置函数时,或者当它们有严重的延迟问题时(自己从未遇到过这些场景,说实话),你应该考虑构建一个实现。

取决于哪一个更清楚地传达“10的权力”。

在我的例子中, Math.Pow(10, n) (虽然它可能意味着数学,但也可以在他们的脸上冲 10和n,我不知道)。

它类似于我更代数地将“10的幂与n”表示为10^n (或10 n )而不是10 * 10 * 10 * ... * 10 n times ,特别是考虑到n是可变的。

答案通常是肯定的,使用Math.Pow()。

但是:如果这段代码真的是时间关键的,并且你知道你正在处理小功率1-9,那么结果可以在Int32中表示,那么它值得优化。 我刚刚制作了一个快速的测试应用程序,并对这两个版本进行了分析(确保编译器没有优化任何代码),并且我的笔记本电脑上的结果是10 ^ 9的最坏情况是循环快20倍 Math.Pow(10,9)。

但请记住,也许这个计算毕竟不是瓶颈。 如果您知道它是一个事实,例如,如果您已经分析了您的应用程序并发现它是一个真正的问题,那么继续使用基于循环的方法替换它(或者更好的是,数组查找)。 如果你只是猜测它可能有问题,那么我建议你坚持使用Math.Pow。 通常:只优化您知道的性能瓶颈。

Math.Pow是为您提供的,并且有详细记录。

任何问题都在文档中。

你为什么不想使用提供的function?

是的,可以使用Math.Pow()