A long double
не может быть напечатано с %f
. Вместо этого используйте double
, который будет работать со спецификатором формата printf
%f
.
В качестве альтернативы, если вы действительно хотите использовать long double
, вы можете использовать %Lf
(чувствительно к регистру), чтобы напечатать его.
Если вы специально хотите, чтобы вывод, указанный вами, без конечных нулей, вам придется использовать %g
(для double
) или %Lg
(для long double
; с учетом регистра).
Также обратите внимание, что long double
не всегда имеет ширину 64 бита, а unsigned int
не всегда имеет ширину 16 бит. Гораздо лучшая идея, чем использование float64
и Uint16
, заключается в простом использовании типов без typedef
s, поскольку вы не должны предполагать ширину типов.