Код: Выделить всё
#include
#include
#include
int main()
{
char sy[80];
double d = -0.58609953401145276;
std::vector vec;
std::set set;
for (int i = 0; i < 1000; i++)
{
#pragma warning(suppress : 4996)
sprintf(sy, "%12.0lf", d);
vec.push_back(sy);
set.insert(sy);
}
std::cout
После запуска цикла размер набора равен 2, возможными выходными значениями являются как -1, так и -0.
-1 встречается только на первой итерации цикла. , все остальные записи равны 0.
Но даже это не происходит последовательно: иногда в результате цикла устанавливается размер 1, все записи равны 0.
Очевидно, повторный вызов sprintf влияет на выход.
-0.58609953401145276 должно округляться до -1, но я читал, что sprintf использует только «старшую» цифру для округления, в данном случае -0,5, но даже она должна получиться округлено до -1, верно?
Поскольку это мой первый пост, я надеюсь, что сделал все правильно, и спасибо за любую помощь :)
Подробнее здесь: [url]https://stackoverflow.com/questions/78685224/inconsistent-rounding-in-c-sprintf[/url]