2016-11-06 44 views
0

Eiffel中,类DOUBLE_MATH定义了三角函数。当我看到这个类的接口,如图here,它说埃菲尔三角函数域是什么?是[-pi/4,+ pi/4]吗?

余弦(ν:REAL_64):REAL_64 - 弧度`V”近似 的三角余弦 - 在范围[-pi/4 ,+π/ 4]

正弦(ν:REAL_64):REAL_64 - 弧度`v”近似 的正弦三角函数 - 在范围[-pi/4,+ pi/4]

正切(ν:REAL_64):REAL_64 - 在范围[-pi/4,+π/ 4]

- 弧度`V”近似 的三角正切

它似乎声称三角函数只能在域[-pi/4,+ pi/4]中工作。但是,当我尝试将它们用于其他值时,它们似乎起作用。

我担心它偶尔会失败,或者我看到的成功实际上是一种不可靠的不确定行为。

使用给定域以外的函数安全吗?如果是这样,为什么指定这个域?如果没有,为什么它只能在这个领域发挥作用?

+0

请注意,弧线函数的文档是错误的,参数不是弧度而是数字,并且给定的范围不是与其他函数一样的域=“范围参数”,而是范围(值)的功能。即使是'arc_tangent'也失败了。 – LutzL

+0

@LutzL哦,是的,我没有注意到这一点。那么你是否说他们不可靠? – GoodDeeds

+0

我认为你可以使用没有限制的功能。但是,对准确性的保证只适用于小的论点。 – LutzL

回答

2

这些函数被实现为来自math.h的相应C函数的包装。由于Eiffel几乎可以在任何带有C编译器的平台上编译,因此该注释确保将该域限制为C编译器实现的最严格的域。另外,一些CPU可以直接支持三角函数,但是如果输入值超出给定范围,它们的精度会下降。总而言之,您需要检查C编译器的手册,以了解您要用于特定三角函数范围的平台,或者,确保输入值处于评论。

+0

谢谢你的回答。 – GoodDeeds