2

我们要计算 2^(3.0) 和 2^(-3.0)。谢谢。

!/bin/bash
c=3.0
g=-3.0
c=$((2**$c)) #syntax error: invalid arithmetic operator (error token is ".0")
g=$((2**$g)) #syntax error: invalid arithmetic operator (error token is ".0")
echo "c=$c"
echo "g=$g"
4

3 回答 3

6

Bash 的内置算术只对整数进行运算,并且不允许**运算符使用负指数。

还有许多其他可用的工具可以执行浮点运算。例如:

$ c=3.0
$ g=-3.0
$ awk "BEGIN{print $c ^ $c}"
27
$ awk "BEGIN{print $c ^ $g}"
0.037037
$ perl -e "print $c ** $c, qq(\n), $c ** $g, qq(\n)"
27
0.037037037037037

要将结果存储在变量中:

$ c=$(awk "BEGIN{print $c ^ $c}")
$ echo $c
27

在 Awk 中,^是指数运算符(这可能会让 C 程序员感到困惑,因为 C 的^运算符是按位异或)。Perl 使用^按位异或,如 C 和**求幂。GNU Awk (gawk) 支持**将幂运算符作为扩展,但在可移植代码中应避免使用该扩展。

于 2013-08-07T02:06:29.233 回答
1

使用 perl 和 awk 的线程中已经有了很好的答案。我们也可以使用python:

python -c "from sys import argv as a; print(pow(int(a[1]), int(a[2])))" 2 6

重复使用:

alias pow='python -c "from sys import argv as a; print(pow(int(a[1]), int(a[2])))"'
pow 2 6
pow 2 -2
于 2016-10-16T07:02:33.397 回答
0
#!/bin/bash
for (( i=1; i<257; i++ ))
  do
    h=`echo  2^"$i" |bc -l`;
    echo -e -n $i "  " '\t'
    echo  $h  |tr -d -c [0-9] |rev |sed -e 's/\([0-9][0-9][0-9]\)/\1,/g' |rev | sed 's/^,//';
  done
exit 0
于 2018-03-30T16:49:48.580 回答