【问题标题】:Why dose cos(90) not equal zero? [closed]为什么剂量 cos(90) 不等于零? [关闭]
【发布时间】:2012-09-21 05:26:00
【问题描述】:

我明白 cos();在 C++ 中使用弧度是对的.. 你可以用.. 获得弧度。

 (angle * PI ) / 180;

为什么会这样

 float value = cos( (90 * PI / 180 ); // == 6.1 etc... and not 0?

如果我在 Windows 中使用科学计算器计算 cos(90),我会得到零。然而,作为一个实验,当我推送 cosh(90) 时,我得到了相同的 6.1 等...值,在 C++ 中调用该函数给了我。

有什么想法吗?这是我现在的代码...

http://ideone.com/YQgLz

我基本上要问的是为什么 C++ 中的 cos(90 degrees) 会返回与 Windows 计算器上的 cosh(90) 相同的数字。 cos(90 degrees) 不应该是零吗?

【问题讨论】:

  • ...这是一道编程题?
  • 真的得到了 6.1 的余弦值?
  • 这是一个编程问题,因为我正试图弄清楚为什么 cos 没有按我认为的那样工作......这是我的代码 - ideone.com/YQgLz
  • (如果是这样,这一定是一个复杂的问题...)
  • 好吧,如果你在计算器上做,如果你使用 cosh,你也能得到它...... .SCREENSHOT - tinyurl.com/c22sfjn

标签: c++ floating-accuracy trigonometry


【解决方案1】:

所以您并没有真正得到 6.1(大于 1 的余弦/正弦值仅适用于某些复数),而是 6.1 * 10^-17。问题是浮点数不是精确值(本质上 - 这就是 base-2 表示的工作方式),数学函数也不返回精确值 - 它们使用各种近似公式来计算值 - don永远不要期望它们是准确的。

【讨论】:

  • 谢谢,但问题是为什么计算器上的 cosh 给我的输出与我的程序相同。 cos(90 度) 不应该是 0 吗?
  • @aJynks 是的,cosine(90deg) 应该是 0,但你不明白为什么不是吗?只需阅读我的答案。此外, cosh() 不会返回相同的值。它返回 6.1*10^38 而不是 6.1*10^-17 - 尾数的前两位相同只是巧合。
  • @aJynks 很抱歉看到你因为一个无辜的问题而受到如此严厉的攻击,这是 StackOverflow 的一个方面让我感到困扰。但是,您需要的两件事是关于Scientific NotationWhat every programmer should know about floating point 的维基百科文章。您的问题的答案包含在理解这些文章中。
猜你喜欢
  • 2019-05-08
  • 1970-01-01
  • 2022-01-18
  • 2020-05-04
  • 1970-01-01
  • 2016-04-06
  • 2013-03-08
  • 1970-01-01
相关资源
最近更新 更多