C# C数字类型中的跟踪精度和累积舍入误差

C# C数字类型中的跟踪精度和累积舍入误差,c#,floating-accuracy,epsilon,C#,Floating Accuracy,Epsilon,我正在写一些代码来为一个研究项目做一些数学计算,我不确定我需要什么样的精度,或者舍入误差会在我的结果中引入多少差异 例如,我想做的一件事是通过将所有三角形的面积相加来计算三维模型零件的曲面面积。 在一个只有几百个三角形的简单模型上,这可能很好,但在一个有上万个三角形的更复杂模型上,这可能会开始引入大量可能累积的舍入误差 有谁能为我推荐一种策略来克服舍入误差,或者仅仅是一种跟踪舍入误差大小的方法吗。例如,我可以使用机器ε值,计算出在计算的每个阶段可能引入的误差量,并保持可能累积误差的运行总数吗 我

我正在写一些代码来为一个研究项目做一些数学计算,我不确定我需要什么样的精度,或者舍入误差会在我的结果中引入多少差异

例如,我想做的一件事是通过将所有三角形的面积相加来计算三维模型零件的曲面面积。 在一个只有几百个三角形的简单模型上,这可能很好,但在一个有上万个三角形的更复杂模型上,这可能会开始引入大量可能累积的舍入误差

有谁能为我推荐一种策略来克服舍入误差,或者仅仅是一种跟踪舍入误差大小的方法吗。例如,我可以使用机器ε值,计算出在计算的每个阶段可能引入的误差量,并保持可能累积误差的运行总数吗

我想使用不同的类型测试一些代码。我知道浮点数会给我7位数,双15-16位数,十进制28-29位数。
有没有办法只编写一次我的方法并推断类型,而不是为每个数字类型编写版本?

如果我理解正确,您可以使用泛型

public T Calculate<T>(T input) where T : struct
{
    // Perform calculations here
}
根据提供的详细信息,我无法判断哪种方法有效。

对于大量几何图形来说,十进制太慢。使用double可提高性能和舍入误差的更高公差。
public float Calculate(float input)
{
    // Perform calculations here
}

public double Calculate(double input)
{
    // Perform calculations here
}

public decimal Calculate(decimal input)
{
    // Perform calculations here
}