Вопрос не очень понятен (как другие отмечали в комментариях), поэтому было бы полезно, если бы вы могли написать более конкретный или конкретный пример расчета. В любом случае, мне кажется, что у вас есть какой-то расчет с обратной связью, и вам нужно достичь точки, в которой расчет перестает меняться.
В математике это можно описать с помощью с фиксированной точкой . Для данной функции f (ваш расчет) точка фиксации - это значение, такое что x = f (x) (это означает, что если вы снова пересчитаете значение, оно перестанет изменяться). Я не уверен, может ли это помочь вам в реализации, но это определенно полезная концепция, которую вы можете использовать, думая о проблеме.
Вот пример метода, который вычисляет фиксированную точку данной функции (используя делегат C # 3.0 Func<T, T>
). Метод является общим и должен уметь сравнивать значения:
static T FixedPoint<T>(T initial, Func<T, T> calculateNext)
where T : IComparable<T> {
T state = initial;
T previous = default(T);
do {
previous = state;
state = calculateNext(state);
} while (previous.CompareTo(state) != 0);
return state;
}
В Википедии есть пример вычисления фиксированной точки функции cos (см. Второй график справа), которую вы можете реализовать следующим образом:
double val = FixedPoint(-1.0, f => Math.Cos(f));
Console.WriteLine(val);
Это очень общий способ описания некоторого цикла, который выполняется до тех пор, пока он не найдет устойчивую точку некоторого вычисления. Тем не менее, ваш вопрос не очень ясен, так что это может быть не то, что вы ищете ...