Точность отслеживания 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
}
Я не могу сказать, что будет работать на основе предоставленных деталей.