В чем разница между 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 сделать то же самое.