В чем разница между LONG float и double в C++?
Так я знаю, что есть большая разница в точности float и Double. Я понимаю. Обещать.
но в C++ при вызове scanf и printf обозначение, используемое для указания double, - "%lf", и это означает long float, верно? Итак, хотя поплавок менее точен, чем двойной, длинный поплавок (предположительно называемый длинным поплавком, потому что он может быть "длиннее", имея больше терминов) является той же точностью и, следовательно, по существу то же самое?
просто уточнить, вот что я имею в виду:
double number = 3.14159;
printf("The number is %lf", number);
Итак, корень моего вопроса: Является ли long float другим именем для double?
3 ответов
нет такого типа как long float
насколько мне известно.
этот пост дает вам информацию о том, почему люди используют lf
печати double
С printf
если это является причиной вашего замешательства.
любезно предоставлено @Jerry Coffin:
"%f " - это (или, по крайней мере," a") правильный формат для double. Для float нет формата, потому что если вы попытаетесь передать float в printf, он будет повышен до double раньше е получает она. "%lf " также приемлемо под настоящим стандартом -- l указывается как не имеющий никакого эффекта, если за ним следует спецификатор преобразования f (среди прочих).
так что причина в том, что когда люди делают:
printf("The number is %lf", number);
это эквивалентно do:
printf("The number is %f", number); //l has no effect when printing double
printf
описатель имена не имеют ничего общего с именами типов.
они просто названы таким образом, поэтому они короткие и легко запоминаются.
поплавок -> двойной -> двойной
%f - > %lf - > %Lf
(кроме того, они не смогли назвать printf
двойной спецификатор as %d
потому что это имя уже зарезервировано для десятичного представления int
(по сравнению с восьмеричной %o
))
ответ@taocp объясняет, почему вы может использовать оба %f
и %lf
С printf
, но обратите внимание, вы не можете сделать это с scanf
на scanf
вы передаете указатель на место, где будет сохранен результат; Вы читаете float
значение %f
и двойное значение с %lf
- вы должны различать их, потому что float
и double
не обязательно иметь одно и то же представление. Для printf
вы передаете значение, которое будет отображаться, и float
значения повышаются до double
потому что они проходят как аргументы в ...
часть прототипа, то есть для printf
нет никакой разницы между float
и double
, так что %f
и %lf
сделать то же самое.