用bash计算功率

时间:2014-04-13 15:43:34

标签: bash

我非常擅长bash脚本编写。我正在尝试计算出来,而我特别想要做的是编写一个允许我输入参数的脚本,并且我的脚本会计算该参数的2的幂。

所以说我会尝试

bash scriptname 3

我的脚本会计算2^3=8

我正在尝试

(( 2 ^ $1 ))

但是没有做任何事情。是否有命令来计算我不知道的东西的力量?

4 个答案:

答案 0 :(得分:14)

bash中的幂运算符是**

示例:

echo $((2 ** 4))
16

答案 1 :(得分:5)

值得指出的是,当结果开始超过LONG_MAX时,您会发现溢出:

$ echo $((2**62))
4611686018427387904
$ echo $((2**63 - 1))
9223372036854775807
$ echo $((2**63))
-9223372036854775808

(当值超过2 63 -1时观察结果

您可能希望使用允许任意精度算术的东西,因为如果计算能力可能会相当快地达到该限制。例如,您可以使用bc(并且它也允许您使用^!):

$ bc <<< 2^63
9223372036854775808
$ bc <<< 2^128
340282366920938463463374607431768211456
$ BC_LINE_LENGTH=0 bc <<< 2^1024
179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216

答案 2 :(得分:3)

只是为了好玩,你也可以使用按位移位(当然这仅适用于功率为2的基数):

echo $((1<<$1))

请务必阅读devnull关于溢出的警告。

答案 3 :(得分:1)

其他答案完全正确,如果使用整数值表示执行此类计算的最佳方法。但值得注意的是算术不处理非整数值。

如果您需要这样的非整数算术,则可以使用bc实用程序。例如,如果你需要获得2.5的3次幂,你可以这样做:

$ bc <<< "scale=10; 2.5 ^ 3"
15.625
$ 

注意设置scale内置变量设置应该给出的小数位数。