Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有理由在Python中避免使用acos?_Python_Fortran_Precision_Trigonometry_Fortran77 - Fatal编程技术网

有没有理由在Python中避免使用acos?

有没有理由在Python中避免使用acos?,python,fortran,precision,trigonometry,fortran77,Python,Fortran,Precision,Trigonometry,Fortran77,我正在用Python重写一个旧的Fortran 77程序。分散在代码中,有很多这样的语句: HPI=1.570791 V=HPI-DASIN(COS_V) SIN_V=DSQRT(1.D0-COS_V**2) 这里使用了两个不同的三角公式(和)。其目的似乎是不惜一切代价避免使用ACO,可能是为了保持精度或速度 在Python中,我所有的浮点都有双精度。如果我能使用math.acos,我会发现代码更具可读性: v = math.acos(cos_v) sin_v = math.sin(v) 有

我正在用Python重写一个旧的Fortran 77程序。分散在代码中,有很多这样的语句:

HPI=1.570791
V=HPI-DASIN(COS_V)
SIN_V=DSQRT(1.D0-COS_V**2)
这里使用了两个不同的三角公式(和)。其目的似乎是不惜一切代价避免使用ACO,可能是为了保持精度或速度

在Python中,我所有的浮点都有双精度。如果我能使用
math.acos
,我会发现代码更具可读性:

v = math.acos(cos_v)
sin_v = math.sin(v)

有什么理由不这样做吗?

当你说你的浮动具有双精度时,你是什么意思?您使用的是标准的Python浮动吗?我相信标准的Python浮动是双倍的。请参见此处:。Python数学函数返回浮点值。这样的话就好了。“今天(2000年11月)几乎所有的机器都使用IEEE-754浮点算法,几乎所有的平台都将Python浮点映射到IEEE-754“双精度”。754双精度包含53位精度”–我可以看到一个参数,用于使用
math.sqrt(1-cos_v**2)
计算
sinu v
,但是如果你需要
v
本身的值,你必须使用反三角函数。我不明白为什么Fortran代码更喜欢使用acos的读取。除非acos不是发明出来的。或者他们想确保得到的
v
的值在某个特定范围内。上面的公式与第一个链接中给出的标识不匹配-角度
v
的正确表达式是
HPI-DASIN(COS_v)
(无
/2
)。它可能被用于不同的目的(或者仅仅是错误的变量命名)?展示一个更完整的应用代码片段。几乎可以肯定,这是一段非常古老的代码,最初用于某个早已不存在的架构,在该架构上sqrt比acos更快。现在,用显而易见的方式编写代码。