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

时间:2018-01-25 03:35:55

标签: c# floating-accuracy epsilon

我正在编写一些代码来进行一些数学运算(对于一个研究项目)我不确定我需要什么级别的精度,或者在我的结果中可以引入多少差异舍入误差。

例如,我想要做的一件事是通过将所有三角形的面积相加来计算3d模型部分表面的面积。 在具有几百个三角形的简单模型上,这可能工作正常,但是在具有数万个三角形的更复杂的模型上,这可能开始引入许多可能累积的舍入误差。

任何人都可以为我推荐一个策略来获取舍入误差,或者只是一种跟踪舍入误差大小的方法。例如,我可以使用机器epsilon值并计算出在计算的每个阶段可能引入的错误量,并保持可能累积错误的运行总计吗?

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

1 个答案:

答案 0 :(得分:0)

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

public T Calculate<T>(T input) where T : struct
{
    // Perform calculations here
}

或者你可以使用重载。

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

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

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

根据提供的详细信息,我无法确定哪种方法有效。