Как заменить бесконечность на вещественное значение?

Рейтинг: 1Ответов: 1Опубликовано: 18.06.2011

Первый вопрос: если взять корень из бесконечности то будет бесконечность? Если какое то большое число возводится в квадрат, то получаем бесконечность и корень из этой бесконечности даст бесконечность, а не первоначальное число?

Если некоторые значения массива x[i] равны бесконечности, то как сделать так чтобы эти значения вместо бесконечности приравнивались например 100?

Ответы

▲ 4Принят

Согласно MSDN при вызове Math.Sqrt(double) с значением double.PositiveInfinity, возвращаемое значение также будет равно double.PositiveInfinity.

Аналогичное поведение для вещественных чисел имеет функция возведения в степень при значении степени > 0. Там же приведена таблица с различными вариантами бесконечностей (в т.ч. отрицательных) на входе и результирующими значениями.

Для "устранения бесконечности" достаточно пройтись по массиву с проверкой на конечность (обычное сравнение тут не сработает, необходимы вызовы double.IsInfinity(), etc):

double[] x;

for (int i = 0; i < values.Length; i++)
{
    if (double.IsPositiveInfinity(x[i])) // или просто double.IsInfinity(x[i])
        x[i] = 100;                      // для включения в т.ч. -бесконечности
}