что происходит, когда мы делим double на float без приведения? - PullRequest
0 голосов
/ 18 мая 2018

Здесь у меня есть код (просто играю)

using System ;
class program{
    static void Main(string[] args)
    {
        float a = 4.246f;
        double b = 8.492;
        System.Console.WriteLine(a*2);
        System.Console.WriteLine(b/a);
    }
}

здесь ожидаемый результат равен 2, но он дает чудесный результат. "2.0000000880453".(я знаю, что это потребует приведения к желаемому результату).

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

1 Ответ

0 голосов
/ 18 мая 2018

Среда выполнения может выполнять операции с плавающей запятой с более высокой точностью, а затем обрезать при присваивании (при необходимости).В конечном итоге, если вы поделите двойное число на число с плавающей точкой, вы получите двойное возвращение, если только вы специально не бросили на число с плавающей точкой.Это может быть подтверждено следующим:

float a = 4.246f;
double b = 8.492;
var c = b/a;
Console.WriteLine(c.GetType()); // System.Double

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

...