fcvt(99.99, 1, &decpt, &sign) results in musl returning "9999". I am pretty sure the standard ensures that regardless of how the rounding is done, only "999" and "1000" are supposed to be valid results for fcvt in this situation. I'd like to add that this seems to occur because of a difference in rounding that occurs between the calls to sprintf in fcvt and ecvt, with fcvt's call of it returning "100.0" and ecvt's call returning "9.999e+01" (i.e. fcvt asked ecvt for 4 significant digits assuming it would return "1000" but it ended up getting a contradicting result from its call to printf)