Почему мое возвращаемое значение неверно?

У меня есть векторный класс на 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;
    }
}

person User2400    schedule 15.01.2010    source источник
comment
Вы когда-нибудь инициализировали x, y и z? В вашем примере он, очевидно, вернет 0.   -  person Leif    schedule 15.01.2010
comment
возможно, вы захотите написать xx + yy + z*z, а не использовать Math.Pow... это и короче, и быстрее...   -  person Spudd86    schedule 14.06.2010


Ответы (1)


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

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

Я получаю результат 1,73...

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

person Michael La Voie    schedule 15.01.2010
comment
Как очень обидно. Похоже, вы правы, а моего тестирования не было. Урок выучен. Удалите все остальное, прежде чем утверждать, что код неверен. Мои извинения и спасибо. - person User2400; 15.01.2010