В данной программе, почему я получил разные результаты для каждого из printfs?
#include <stdio.h>
int main()
{
float c = 4.4e10;
printf("%f\n", c);
printf("%f\n", 4.4e10);
return 0;
}
И это показывает следующий вывод:
44000002048.000000
44000000000.000000
doubleto floatв язык C? Или вы хотите знать, какие значения получаются в результате преобразования, то есть, какие последствия имеет преобразование? Или что-то другое?
Cмы использовали printf("%f",x)для a floatи printf("%lf",x)для a double. Когда все изменилось? И как можно явно напечатать (одиночный) float- printf("%hf",x)??
%lfв printf - это то же самое, что и %f. floatВ переменном аргументе преобразуются в doubleкомпиляторе, так же , как shortполучает преобразовано в int.
4.4e10этоdoubleконстанта, которая конвертируетсяfloatв инициализацию,cно сохраняетсяdoubleпри передачеprintf. Однако вам также может быть интересно узнать, что добавлениеfсуффикса делает егоfloatконстантой: при печати4.4e10fбудет отображаться то же значение, что и при инициализацииcв4.4e10f. Отличиеfloatконстант отdoubleконстант может быть важным для качественной работы с арифметикой с плавающей точкой.