代码之家  ›  专栏  ›  技术社区  ›  User2400

为什么我的返回值错误?

  •  2
  • User2400  · 技术社区  · 16 年前

    我有一个C(下面的片段)中的向量类。我的问题是,当我调用getMagnitude()时,它总是返回0.0f-即使调试器正在运行,并且我检查sq是否具有有效值,一旦它被传递回其他函数(例如:normalize())中,它就返回0.0f。有人能解释并帮助我修复它吗?我的猜测是,它与双浮点转换有关,但我无法计算。

    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 回复  |  直到 13 年前
        1
  •  5
  •   Michael La Voie Frederik Gheysels    16 年前

    我刚刚用这个设置测试了您的代码,它运行得很好:

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

    我得到的结果是1.73…

    问题可能出在别处吗?你能创建一个小的控制台应用并插入代码来隔离它吗?