有没有理由在Python中避免使用acos?
我正在用Python重写一个旧的Fortran 77程序。分散在代码中,有很多这样的语句:有没有理由在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) 有
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更快。现在,用显而易见的方式编写代码。