Чтобы развернуть другой ответ, наименьшее увеличение, которое вы можете сделать до двойного, составляет одну единицу в последнем месте, или ULP, поскольку double - это тип с плавающей запятой, тогда размер ULP изменяется, при 1E + 25 он будет быть около 1E + 10.
Как вы можете видеть по сравнению с 1E + 10, увеличение на 1 действительно может ничего не добавлять. это именно то, что будет делать double, поэтому не имеет значения, если вы попробуете это 10 ^ 25 раз, оно все равно не увеличится, если вы не попытаетесь увеличить по крайней мере на 1 ULP
Если увеличение на ULP полезно, вы можете сделать это, приведя биты к длинному, и обратно - это быстрый метод расширения, чтобы сделать это
public static double UlpChange(this double val, int ulp)
{
if (!double.IsInfinity(val) && !double.IsNaN(val))
{
//should probably do something if we are at max or min values
//but its not clear what
long bits = BitConverter.DoubleToInt64Bits(val);
return BitConverter.Int64BitsToDouble(bits + ulp);
}
return val;
}