Правильное поведение не должно заключаться в том, что компилятор интерпретирует недублированные литералы как плавающие по одиночной точности, а должен признать, что преобразования от double to float следует рассматривать как расширяющие преобразования, поскольку для каждого значения double
существует либо точно одно однозначно правильное представление float
, либо (в нескольких случаях редких краев) будет ровно два одинаково хороших значения, ни один из которых не будет больше, чем часть на квадриллион, из однозначно правильного значения. Семантически преобразования от float
до double
следует рассматривать как сужение конверсий (поскольку они требуют, чтобы компилятор «угадал» информацию, которой он не располагает), но практические трудности, которые могут возникнуть, могут оправдать превращение конверсий в этом направлении «расширение».
Возможно, следует просить Microsoft добавить расширение с double
на float
?Нет никакой веской причины, почему код, который вычисляет графические координаты, как double
, должен быть загроможден приведением типов при вызове функций рисования.
Да ладно! Сколько плавающих констант вы должны определить? Если многие, просто используйте «Найти и заменить» несколько раз. – leppie
Я согласен с @leppie. Вы все равно должны ограничивать литералы. Если вы выполняете множество назначений по умолчанию, и это, как правило, одно и то же значение, переместите их в статический внутренний класс и ссылайтесь на них таким образом. Кроме того, вы можете использовать нижний регистр f, а не верхний регистр F, чтобы обозначить плавающий литерал, сохраняя нажатие клавиши shift. Если вам все равно. :) – Randolpho
Мне интересно, почему кто-нибудь когда-либо использовал поплавки вместо двухместных. Можете ли вы рассказать нам о своем «числе причин»? –