printf("%.0lf\n", x);
은 정확히 값을 (double) x
으로 인쇄 할 필요가 없습니다.
호환되는 C 컴파일러/표준 C 라이브러리는 DBL_DECIMAL_DIG
(일반적으로 17)을 인쇄 할 코드를 생성하며 중요한 십진수를 수정하십시오. 기타는 더 많은 숫자를 올바르게 인쇄 할 수 있습니다. (광산 인쇄 된 9223372036854775808
). <float.h>
이
// 456789
9223372036854775800 // answer
9223372036854775808 // true answer:
익스트림 예
DBL_MAX
특정 시점 이후 0을보고합니다 printf("%.0lf\n" ,DBL_MAX);
의 exact value
의
179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368
그러나 많은 결과가있을 수 있습니다 참조
179769313486231570814527423731704356798070600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
,536,
OP later added 참조 번호 pow()
의 기능은 long long int pow(long long int a, long long int b)
입니다. pow_ll_version(2,63)
은 9223372036854775808
이 될 것으로 예상되며, 이는 많은 수의 1을 초과합니다. LLONG_MAX
- 확실히 정의되지 않은 동작입니다. 을에서 -9223372036854775808
으로 감싸고 printf("%llu\n" , long_long_int_result);
(더 일치하지 않는 지정자와 유형으로 더 많은 UB)로 인쇄했다고 가정합시다. 이것은 OP에 9223372036854775808
을 부여했을 수 있습니다.
printf()
정수 출력은 부동 소수점 값과 정확하게 일치하지 않습니다.
[mcve]를 질문의 일부로 포함하십시오. –
"올바르게 작동하지 않음"을 정의하십시오. 실제 출력이 이상적입니다. – fvu
다른 유형의 의미를 알고 있습니까? –