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

2

У меня есть векторный класс в С# (фрагмент ниже). Моя проблема в том, что когда я вызываю 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;
    }
}
  • 0
    Вы когда-нибудь инициализировали x, y и z? В вашем примере это, очевидно, вернет 0.
  • 0
    Возможно, вы захотите написать x x + y y + z * z, а не использовать Math.Pow ... это и короче, и быстрее ...
Теги:
floating-point
casting
vector
double

1 ответ

5
Лучший ответ

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

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

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

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

  • 0
    Я также проверил это, и он работал нормально.
  • 1
    Как очень неловко. Похоже, ты прав, а моего тестирования не было. Урок выучен. Уберите все остальное, прежде чем утверждать, что код неверен. Мои извинения и спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню