Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Double.PositiveInfinity


Автор: Idsa 11.4.2007, 18:12
Я решил посмотреть, как в Double реализованы бесконечности... и вот на что наткнулся в рефлекторе:
Код

public const double PositiveInfinity = (double) 1.0 / (double) 0.0;

Т. е., по всей видимости, для double каким-то интересным образом переопределена операция деления. Однако в рефлекторе ничего подобного я не нашел.
Так как же все-таки реализовывается деление на ноль для double?

Автор: Void 11.4.2007, 18:25
Формат IEEE 754 для чисел с плавающей точкой определяет специальные значения, такие как бесконечность и NaN (Not a Number). Результатом деления на ноль является именно бесконечность.

Автор: Idsa 11.4.2007, 18:30
Void, это все понятно... но я спрашивал именно о реализации.

Автор: Void 11.4.2007, 18:37
Реализации чего? Так оно работает на аппаратном уровне. И от языка это не зависит.
Код
#include <stdio.h>

int main(void)
{
    double zero = 0.0;
    double inf = 1.0 / zero;
    printf("%lf", inf);
    // выводит 1.#INF00 или что-то в этом роде
}

Автор: Idsa 11.4.2007, 18:53
Понятненько

Автор: mr.DUDA 11.4.2007, 20:51
В принципе, можно и напрямую загружать во флоат значение +INF (как в книге по Ассемблеру тов. Юрьева), но это потребовало бы кастовать 4-байтный int в 4-байтный float, а сие действие нельзя выполнить без unsafe. Кроме того, мало ли как на конкретной платформе реально выглядит INF (например в XBox360), и к тому же вдруг это изменится в будущем... smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)