首页 >后端开发 >C++ >为什么 C/C \ 的 cos() 和 sin() 函数对于 180 度等公角会产生意外结果?

为什么 C/C \ 的 cos() 和 sin() 函数对于 180 度等公角会产生意外结果?

Patricia Arquette
Patricia Arquette原创
2024-11-27 12:00:16835浏览

Why Do C/C  's cos() and sin() Functions Produce Unexpected Results for Common Angles Like 180 Degrees?

C/C 的 cos() 和 sin() 对于熟悉的角度的意外结果

对 C/C 的 cos 应用 180 度的角度时() 和 sin() 函数,可能会出现不正确的结果。这可能会令人惊讶,因为我们预计结果为:

  • sin of 0.0547
  • cos of 0.99

但是,实际结果通常有所不同:

  • 罪恶3.5897934739308216e-009
  • cos of -1.00000

这种差异源于 C/C 中 cos(a)、sin(a) 和 tan(a) 函数的事实期望弧度作为参数,而不是角度。从 180 度转换为弧度有时会引入近似值。

即使使用正确的弧度计算,由于 double 的有限精度以及 PI 的潜在错误表示,结果仍可能会出现偏差。

为了解决这个问题,最好在调用 trig 函数之前减少参数的度数。通过将角度限制在 -45° 到 45° 之间,我们确保了结果的准确性。

例如,考虑以下代码,它使用参数缩减以度为单位计算 sin():

#include <math.h>
#include <stdio.h>

static double d2r(double d) {
  return (d / 180.0) * ((double) M_PI);
}

double sind(double x) {
  if (!isfinite(x)) {
    return sin(x);
  }
  if (x <p>此代码生成的结果比原始方法更准确,特别是对于多个角度的值,因为它在调用 trig 函数之前执行参数缩减。</p></stdio.h></math.h>

以上是为什么 C/C \ 的 cos() 和 sin() 函数对于 180 度等公角会产生意外结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn