По замыслу, почему компилятор C # позволяет делить любые значения с плавающей запятой или двойные на ноль? - PullRequest
4 голосов
/ 28 июля 2010

По замыслу, почему компилятор C # позволяет делить любые значения с плавающей запятой или двойные на ноль?

class Program
{
    static void Main(string[] args)
    {
        double x = 0.0 / 0;

        float y = 1f / 0;


    }
}

Ответы [ 3 ]

10 голосов
/ 28 июля 2010

Поскольку значения IEEE 754 с плавающей точкой имеют специальные нечисловые значения для решения этой проблемы:

PS Home:\> 1.0/0
Infinity
PS Home:\> 0.0/0
NaN

, тогда как деление целого числа на ноль всегда является исключением (в смысле C # 1 ), так что вы можете просто сгенерировать исключение напрямую.


1 Деление числа с плавающей запятой на ноль также является исключением, но на совершенно другом уровне и во многих программахязыки абстрагируют это.

1 голос
/ 28 июля 2010

Поскольку значения с плавающей запятой имеют действительное (и действительно полезное) представление бесконечности, а целые числа любого типа - нет.

0 голосов
/ 28 июля 2010

Причина, по которой компилятор позволяет вам делить число с плавающей запятой или двойное число на ноль, заключается в том, что числа с плавающей запятой и двойное число имеют представления о понятии положительной бесконечности и отрицательной бесконечности (и "не числа"), поэтому это значимая вещьto allow.

Одна странность состоит в том, что компилятору не удается спот

 decimal d = 2; 
 decimal d2 = d/0M

как деление на ноль, даже если он находит его, если вы пишете эквивалентный код для целого числа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...