2009-10-14 84 views
2

東西這裏有另一篇文章關於反正切,但我沒有看到任何相關的答案:C# - 爲什麼Math.Atan(1)= 45附近

C# - Why Math.Atan(Math.Tan(x)) != x?

是不是Math.Atan一樣!作爲tan-1?在我的計算器我做的:

TAN-1(1),我也得到45

棕褐色(45)= 1

在C#:

數學。 Atan(1)= 0.78539816339744828 // 無處附近45.

Math.Tan(45)= 1.6197751905438615 // 1 dp在< Piover2上。

這裏發生了什麼?

+1

都導致相同的單位,比如度或弧度? – TheVillageIdiot 2009-10-14 04:21:42

+3

25年前,我問了我的數學老師這個同樣的問題,當然除了在Commodore PET上問BASIC,不是關於C#。 :) – 2009-10-14 05:39:00

+0

在我的計算器上,我可以在度,弧度和格拉斯之間切換。 – starblue 2009-10-14 19:01:57

回答

26

C#將角度視爲弧度;你的計算器正在使用度數。

3

Math.Atan返回一個弧度值。你的計算器正在使用度數。 0.7853 ...(π/ 4)弧度是45度。 (相反,Math.Tan(45)告訴你45弧度的tan。)

23

Atan(1)等於π/4。以弧度工作時這是正確的值。圖書館的其他計算也是如此。

隨意將這些值轉換:

double DegreeToRadian(double angle) { return Math.PI * angle/180.0; } 
double RadianToDegree(double angle) { return angle * (180.0/Math.PI); } 

這意味着45個弧度約等於2578.31008度,所以你正在尋找的切線應更好地表達爲棕褐色(π/4),或者如果你不介意「作弊」:Math.Tan(Math.Atan(1)); // ~= 1。我相當自信,如果你自己嘗試過,你會意識到發生了一些合理的事情,並且可能偶然發現了弧度與度數的關係。

+0

所以...下面介紹如何使用這些單詞,不應將這些方法命名爲DegreesToRadians()和RadiansToDegrees()? – unwind 2009-10-14 14:50:05

+0

當然。無論你想要什如果C#支持宏,則'd2r()'和'r2d()'可能會變得有趣的宏名稱。 – dlamblin 2009-10-14 16:53:41

7

您的計算器是Degrees,C#正在Radians中進行這些計算。

爲了得到正確的值:

int angle = 45; //in degrees 

int result = Math.Tan(45 * Math.PI/180); 

int aTanResult = Math.Atan(result) *180/Math.PI;