Почему мое возвращаемое значение неверно? - PullRequest
2 голосов
/ 15 января 2010

У меня есть векторный класс в C # (фрагмент ниже). Моя проблема в том, что когда я вызываю GetMagnitude (), он всегда возвращает 0.0f - даже при работающем отладчике, и я проверяю, что Sq имеет допустимое значение, как только он возвращается в другую функцию (например: Normalize ()) он вернул 0.0f. Может кто-нибудь объяснить это и помочь мне это исправить? Я предполагаю, что это как-то связано с преобразованием double-> float, но я просто не могу понять это.

public class float3
{
    public float x;
    public float y;
    public float z;


    public float GetMagnitude()
    {
        float SumSquares = (float)( Math.Pow(x, 2) + Math.Pow(y, 2) + Math.Pow(z, 2));
        float Sq = (float)Math.Sqrt(SumSquares);
        return Sq;
    }

    public void Normalize()
    {
        float inverse = 1.0f / GetMagnitude();

        x *= inverse;
        y *= inverse;
        z *= inverse;
    }
}

1 Ответ

5 голосов
/ 15 января 2010

Я только что проверил ваш код с этим набором, и он отлично работал:

void Main()
{
    var myData = new float3
    {
        x = 1,
        y = 1,
        z = 1
    };
    float result = myData.GetMagnitude();
}

Я получаю результат 1.73 ...

Возможно ли, что проблема в другом месте? Не могли бы вы создать небольшое консольное приложение и вставить этот код просто для его изоляции?

...