2

я получил странное поведение сПочему std :: numeric_limits <float> :: min() отличаются поведением при потоковой передаче на выходе с различными функциями?

std::numeric_limits<float>::min() 

, когда я называю станд :: соиЬ я получить выходное значение 1.17549e-38

в отличие, когда я использую

printf("%f", std::numeric_limits<float>::min()); 

Я получаю значение 0,000000.

обратите внимание, что, когда я оцениваю (std::numeric_limits<float>::min() == std::numeric_limits<float>::min()) я получаю true (который является интуитивно понятным и логичным)

так, может ли один объяснить мне эту разницу в выходе?

ответ

3

cppreference for numeric_limits:

std::numeric_limits<float>::min() возвращается FLT_MIN.

Возвращаемое значение (которое не соответствует 0), отображаемое с использованием %f, фактически отформатировано на фиксированное число знаков после запятой. Формат '%f' печатает 6 знаков после запятой в фиксированном формате.

Вы можете использовать:

%e=gives the scientific notation 
%g=handles large floating numbers 
+0

любое предложение зафиксировать этот выход с Printf? –

+1

Вместо этого используйте '% g' или'% e'. –

Смежные вопросы