Точность отслеживания C# и накопленная ошибка округления в типах чисел

Я пишу некоторый код для математики (для исследовательского проекта). Я не уверен, какой уровень точности мне понадобится, или сколько ошибок округления может внести в мои результаты.

Например, одну вещь, которую я хочу сделать, - это вычислить площадь поверхности деталей 3d-моделей, сложив площадь всех треугольников. На простой модели с несколькими сотнями треугольников это может работать нормально, но на более сложной модели с десятками тысяч треугольников это может привести к множеству ошибок округления, которые могут накапливаться.

Может ли кто-нибудь порекомендовать стратегию для меня, чтобы избежать ошибок округления или просто метод для отслеживания размера ошибки округления. Например, могу ли я использовать значение epsilon машины и вычислить величину ошибки, которая могла быть внесена на каждом этапе расчета, и сохранить промежуточную сумму возможной накопленной ошибки?

Я хотел бы протестировать некоторый код, используя разные типы. Я знаю, что число с плавающей запятой даст мне 7 цифр, двойную 15-16 цифр и десятичную 28-29 цифр. Есть ли способ написать мои методы один раз и вывести тип вместо записи версии для каждого числового типа?

1 ответ

Если я правильно понимаю, вы можете использовать дженерики.

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
}

Я не могу сказать, что будет работать на основе предоставленных деталей.

Другие вопросы по тегам