Math.Atan2 или проблема экземпляра класса в C # - PullRequest
0 голосов
/ 24 декабря 2009

Вот моя проблема (C #):

double Y = 0.0;
double X = -21.0;

double q1_Test = Math.Atan2(0.0, -21.0);               // gives Math.Pi
double q1_Test2  = Math.Atan2(( double)Y, (double)X);  // gives Math.Pi

double w1 = <SomeclassInstanceGlobalHere>.getW1();  // This is a class which updates a variable
double w2 = <SomeclassInstanceGlobalHere>.getW2();  // This is a class which updates a variable

double q1  = Math.Atan2(w2, w1);              // ** gives -Math.Pi ** ???
//w2 shows 0.0 and w1 shows -21.0

Когда я получаю значения из другого класса, значения переменных равны 0,0 и -21,0 соответственно. Это также отображается в IDE при отладке. Что здесь не так?

Ответы [ 2 ]

3 голосов
/ 24 декабря 2009

w2 на самом деле должно быть -0.0, что отформатировано как 0

Следующий пост в блоге показывает, как вы можете на самом деле проверить это (Decimal.GetBits (значение)): http://blogs.msdn.com/bclteam/archive/2006/10/12/decimal-negative-zero-representation-lakshan-fernando.aspx

2 голосов
/ 24 декабря 2009

Обратите внимание, что -Math.PI и Math.PI эквивалентны для целей тригонометрии. Почти всегда очень плохая идея сравнивать углы, как если бы они были двойными. См. Расширенное обсуждение SO: Усреднение углов ... Опять

...