You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#浮点数加减后未得原值?角度计算精度问题求助

问题排查与解决

首先看你的Debug输出代码,这里有个明显的字符串拼接错误:

Debug.Log("small + big theta teeth: " + smallThetaTeeth + bigThetaTeeth);

在C#中,字符串与数值的拼接是按顺序执行的,这段代码会先把"small + big theta teeth: "和smallThetaTeeth拼接成新字符串,再和bigThetaTeeth拼接,最终输出的是两个数值的字符串连写结果,而非它们的数学和。正确写法需要给加法运算加括号,让数学计算优先执行:

Debug.Log("small + big theta teeth: " + (smallThetaTeeth + bigThetaTeeth));

如果修正后结果仍不符合预期,再排查以下几点:

  • Acos输入合法性:检查(t / 2) / tr的计算结果是否在[-1, 1]范围内。若超出该区间,Mathf.Acos会返回NaN(非数值),导致smallThetaTeeth异常,进而让bigThetaTeeth也出错。可以加日志验证:
    float acosInput = (t / 2f) / tr;
    Debug.Log("Acos input: " + acosInput);
    
  • 数值精度误差:即使使用double,浮点数运算也可能存在微小精度偏差(比如2π本身是近似值)。可以允许一定误差范围,比如判断两者之和与dTheta的差值是否小于1e-6(可根据需求调整精度):
    float sum = smallThetaTeeth + bigThetaTeeth;
    if (Mathf.Abs(sum - dTheta) < 1e-6) {
        Debug.Log("Sum matches dTheta (within tolerance)");
    } else {
        Debug.Log("Sum doesn't match: " + sum + " vs " + dTheta);
    }
    
  • 变量类型一致性:确保d、t、tr都是浮点类型(float或double),若为整数类型,除法会执行整数除法导致结果截断。比如(t / 2)如果t是整数,需改成(t / 2f)来维持浮点运算。

内容的提问来源于stack exchange,提问作者Caleb Reader

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 13:44:54