在Eiffel中,类DOUBLE_MATH
定义了三角函数。当我看到此类的界面显示为here时,它会显示
余弦(v:REAL_64):REAL_64 - 弧度'v'的三角余弦近似 - 在[-pi / 4,+ pi / 4]范围内
和
正弦(v:REAL_64):REAL_64 - 弧度'v'三角正弦波近似 - 在范围[-pi / 4,+ pi / 4]
和
tangent(v:REAL_64):REAL_64 - 弧度的三角正切“v'近似 - 在范围[-pi / 4,+ pi / 4]
似乎声称三角函数只能在域[-pi / 4,+ pi / 4]中起作用。但是,当我尝试将它们用于其他值时,它们似乎有效。
我担心它可能偶尔会失败,或者我所看到的成功实际上是一种不可靠的不明行为。
使用给定域外的函数是否安全?如果是这样,为什么要指定此域名?如果没有,为什么这些功能只能在这个域中起作用?
答案 0 :(得分:2)
这些函数是作为math.h
的相应C函数的包装器实现的。因为可以使用C编译器为几乎任何平台编译Eiffel,所以注释确保将域限制为C编译器实现的最严格的域。此外,一些CPU为三角函数提供直接支持,但如果输入值超出给定范围,它们的精度会下降。
总而言之,您需要检查C编译器的手册,了解您将要用于特定三角函数范围的平台,或者确保输入值在注释中指定的范围内。