Вопрос
Я хотел бы увидеть фрагмент кода, который выполняет деление с плавающей запятой и возвращает Infinity
при делении на ноль.Где я могу его найти?
Пример кода
Мотивация желания узнать, что происходит из этого кода, взято из документации .NET.Я бы ожидал получить DivideByZeroException
, но вместо этого я получил Infinity
.
https://docs.microsoft.com/en-us/dotnet/api/system.dividebyzeroexception?view=netframework-4.8#remarks
using System;
public class Example
{
public static void Main()
{
int number1 = 3000;
int number2 = 0;
Console.WriteLine((double)number1 / number2);
}
}
// The example displays the following output:
// Infinity
Документация
Я нашел документацию о том, что плавающийделение на ноль-точку не вызывает исключение, поэтому это нормально:
https://docs.microsoft.com/en-us/dotnet/api/system.dividebyzeroexception?view=netframework-4.8#remarks
Деление значения с плавающей точкой на ноль не вызывает исключения;это приводит к положительной бесконечности, отрицательной бесконечности или не числу (NaN), в соответствии с правилами IEEE 754.Поскольку в следующем примере используется деление с плавающей точкой, а не целочисленное деление, операция не вызывает исключение DivideByZeroException.
Код в .NET Framework
В Visual Studio я завис надзнак деления "/" и Resharper показывают
double double.operator /(double left, double right)
И теперь я хотел бы увидеть реализацию этого, чтобы увидеть, как возвращается Infinity
.Но я не могу его найти.
Я проверял здесь
, но не вижу оператора деления.
Приведенная выше ссылка приведет меня сюда
, но также ничего о деталях реализации.
Я также посмотрел здесь
но смотрите только закомментированный код
/// Double IArithmetic<Double>.Divide(Double divisor, out bool overflowed) {
/// Double s = m_value / divisor;
/// overflowed = IsInfinity(s) || IsNaN(s);
/// return s;
/// }
Также ничего в реализации Double
corefx :
Я бы ожидал, что что-то понравилось (псевдокод):
public static double operator /(double left, double right)
{
if (right == 0)
{
return double.Infinity;
}
else
{
...
}
}