【问题标题】:What is the domain of trigonometric functions in Eiffel? Is it [-pi/4,+pi/4]?埃菲尔三角函数的域是什么?是 [-pi/4,+pi/4] 吗?
【发布时间】:2016-11-06 06:09:06
【问题描述】:

Eiffel 中,DOUBLE_MATH 类定义了三角函数。当我看到这个类的界面如图here,它说

余弦 (v: REAL_64): REAL_64 -- 近似弧度“v”的三角余弦 -- 在 [-pi/4, +pi/4] 范围内

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

切线(v:REAL_64):REAL_64 -- 近似弧度“v”的三角正切 -- 在 [-pi/4, +pi/4] 范围内

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

我担心它可能偶尔会失败,或者我看到的成功实际上是一种无法依赖的未定义行为。

在给定域之外使用函数是否安全?如果是这样,为什么要指定这个域?如果不是,为什么要让函数只在这个域中起作用?

【问题讨论】:

  • 请注意,arcus 函数的文档是完全错误的,参数不是弧度而是数字,给定的范围不是 domain="range of arguments" 与其他函数一样,而是函数的(值的)范围。对于arc_tangent,即使这样也失败了。
  • @LutzL 哦,是的,我没有注意到这一点。所以你是说他们不可靠?
  • 我认为您可以不受限制地使用这些功能。但是,准确性保证仅适用于小参数。

标签: math trigonometry eiffel


【解决方案1】:

这些函数被实现为来自math.h 的相应 C 函数的包装器。因为几乎可以使用 C 编译器为任何平台编译 Eiffel,所以注释确保将域限制为 C 编译器实现的最严格的域。此外,一些 CPU 提供对三角函数的直接支持,但如果输入值超出给定范围,它们的精度会下降。

总而言之,您需要查看 C 编译器的手册,了解您要用于特定三角函数范围的平台,或者,确保输入值在注释中指定的范围内.

【讨论】:

  • 虽然如此,但恕我直言,这使得那些 Eiffel 函数相当无用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-24
  • 2011-01-10
  • 2021-02-17
  • 2012-11-05
  • 2021-08-31
  • 1970-01-01
相关资源
最近更新 更多