如何在Bash中计算arccos()?

4

我需要在bash脚本中计算arccos()
gawk可以计算cos(theta)sin(theta)
如何在Linux中计算arccos()


2
你为什么想要计算反余弦?你为什么想要使用bash来完成这个任务? - michas
为了保持计算速度,这个脚本完全用bash编写。有没有什么方法可以做到这一点? - questionhang
2个回答

8

您可以通过调用perl等语言来实现所需功能:

acos_05=`perl -E 'use Math::Trig; say acos(0.5)'`

然而,正如michas所指出的那样,你为什么要在bash中这样做呢?如果你需要做的不仅仅是加减乘除,bash就不是这个工具的最佳选择。它从来没有被设计用于此,缺乏内置函数,最重要的是,它的引号行为(将所有内容视为字符串)使得实现任何事情都很痛苦。
我建议你使用你喜欢的任何编程语言(不是shell脚本语言):Python,Ruby,Tcl,Perl等等;它们都比bash更好。

7
通过使用命令行工具bc并参考Advantage Bash,当$1arccos()函数的第一个参数时,反余弦函数如下所示。
arccos ()
{
    scale=3
    if (( $(echo "$1 == 0" | bc -l) )); then
        echo "a(1)*2" | bc -l
    elif (( $(echo "(-1 <= $1) && ($1 < 0)" | bc -l) )); then
        echo "scale=${scale}; a(1)*4 - a(sqrt((1/($1^2))-1))" | bc -l
    elif (( $(echo "(0 < $1) && ($1 <= 1)" | bc -l) )); then
        echo "scale=${scale}; a(sqrt((1/($1^2))-1))" | bc -l
    else
        echo "input out of range"
        return 1
    fi
}

1
感谢@Cristian Ciupitu对仅包括弧度答案和负输入的编辑。 - V-SHY

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接