Непоследовательное округление в C++ sprintf? [закрыто]C++

Программы на C++. Форум разработчиков
Anonymous
Непоследовательное округление в C++ sprintf? [закрыто]

Сообщение Anonymous »

У меня есть следующий фрагмент кода, показывающий несогласованное поведение округления в вызове sprintf:

Код: Выделить всё

#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]

Вернуться в «C++»