Правильное поведение компилятора заключается не в том, чтобы интерпретировать не суффиксированные литералы как числа с плавающей запятой, а в том, чтобы признать, что преобразования из двойного в число с плавающей точкой следует рассматривать как расширяющие преобразования, поскольку для каждого значения double
либо точно одно однозначно правильное представление float
, либо (в нескольких редких случаях) будет ровно два одинаково хороших значения, ни одно из которых не будет больше, чем часть на квадриллион из того, чтобы быть однозначно корректным значением. Семантически преобразования из float
в double
следует рассматривать как сужающие преобразования (поскольку они требуют, чтобы компилятор "угадал" информацию, которой у него нет), но практические трудности, которые могут возникнуть, могут оправдать выполнение преобразований в этом направлении. 'расширение'.
Возможно, стоит обратиться к Microsoft с просьбой добавить расширяющуюся конверсию из double
в float
? Нет веской причины, по которой код, который вычисляет графические координаты как double
, должен быть загроможден типами при вызове функций рисования.