Является ли поведение std :: chrono :: round on an-range значения, как предполагалось?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Является ли поведение std :: chrono :: round on an-range значения, как предполагалось?

Сообщение Anonymous »

В настоящее время я окружу std :: chrono :: duration to std :: chrono :: duration , и когда я даю ему значения вне диапазона, он окружает до 1s вместо 4294967295S . />

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

template 
constexpr ToDuration round(const duration& d);
тки... [...] < /p>
< /blockquote>
Вот мой точный код: < /p>

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

#include 
#include 
#include 
#include 

int main()
{
std::chrono::duration seconds{std::numeric_limits::max()};
printf("float:    %f\n", seconds.count());
printf("uint32_t: %u\n", std::chrono::round(seconds).count());
printf(" int32_t: %d\n", std::chrono::round(seconds).count());
printf("uint64_t: %lu\n", std::chrono::round(seconds).count());
printf(" int64_t: %ld\n", std::chrono::round(seconds).count());
}
< /code>
, который выводит < /p>
float:    340282346638528859811704183484516925440.000000
uint32_t: 1
int32_t: -2147483647
uint64_t: 9223372036854775809
int64_t: -9223372036854775807
< /code>
Как вы можете видеть, другие типы целочисленных целого числа также ведут себя странно. В отличие от std :: lround 
et al., Std :: chrono :: round ничего не говорит о том, чтобы быть не определенным, если ввод с плавающей точкой выходит за пределы диапазона. x86_64, но я сначала заметил проблему в системе ARMV7, используя GCC .)


Подробнее здесь: https://stackoverflow.com/questions/779 ... s-intended
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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