printf("%.0lf\n", x);
n'est pas nécessaire pour imprimer le exacte la valeur de (double) x
.
Un compilateur C conforme/bibliothèque C standard génèrera du code qui imprimera environ DBL_DECIMAL_DIG
(généralement 17), corrigera significativement chiffres décimaux. D'autres peuvent imprimer plus de chiffres correctement. (Mine imprimé 9223372036854775808
). Voir <float.h>
// 456789
9223372036854775800 // answer
9223372036854775808 // true answer:
exemple extrême
DBL_MAX
peuvent avoir les exact value de
179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368
Pourtant, de nombreux résultats de printf("%.0lf\n" ,DBL_MAX);
rapportera des zéros après un certain point
179769313486231570814527423731704356798070600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
OP later added que la fonction de référence pow()
était long long int pow(long long int a, long long int b)
. pow_ll_version(2,63)
devrait entraîner 9223372036854775808
, ce qui est passé 1 beaucoup de LLONG_MAX
- certainement un comportement indéfini. Supposons qu'il enveloppé à -9223372036854775808
, et a été imprimé avec printf("%llu\n" , long_long_int_result);
(plus de UB comme spécificateur et type mis-apparié). Cela peut avoir donné 9223372036854775808
à OP.
printf()
La sortie des entiers est exacte, contrairement aux valeurs à virgule flottante.
Veuillez inclure un [mcve] dans votre question. –
Définir "ne fonctionne pas correctement", idéalement avec la sortie REAL – fvu
Savez-vous ce que différents types signifient? –