首頁 >後端開發 >C++ >為什麼 C/C \ 的 cos() 和 sin() 函數對於 180 度等公角會產生意外結果?

為什麼 C/C \ 的 cos() 和 sin() 函數對於 180 度等公角會產生意外結果?

Patricia Arquette
Patricia Arquette原創
2024-11-27 12:00:16837瀏覽

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 中(cosa(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