https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97365
Bug ID: 97365 Summary: gcvt and qgcvt do not always provide requested precision Product: gcc Version: 9.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: sisyphus359 at gmail dot com Target Milestone: --- gcvt() will assign no more than 17 digits of precision. qgcvt() will assign no more than 21 digits of precision. Here is the demo : /************************************************/ #include <stdio.h> #include <stdlib.h> int main(void) { char ebuf[80]; gcvt(0.1, 55, ebuf); printf("%s\n", ebuf); qgcvt(0.1L, 67, ebuf); printf("%s\n", ebuf); return 0; } /************************************************/ On Ubuntu-20.04, gcc-9.3.0 I got: 0.10000000000000001 0.100000000000000000001 I expected: 0.1000000000000000055511151231257827021181583404541015625 0.1000000000000000000013552527156068805425093160010874271392822265625 The "expected" values are exact base 10 representations of the values contained in the double 0.1, and in the (80-bit extended precision) long double 0.1. Cheers, Rob