Надежное обнаружение переполнения конверсии с плавающей точкой/целочисленным типомC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Надежное обнаружение переполнения конверсии с плавающей точкой/целочисленным типом

Сообщение Anonymous »

Существует ли безопасный способ надежно определить, может ли интегральный тип t сохранить целочисленное значение с плавающей точкой f (так что f == Пол (f) ) без какого-либо переполнения? Целое число переполнений - это не определено поведение в C ++. Я заинтересован в решении, которое является правильным в соответствии с текущим стандартом C ++ (C ++ 17 на написании) и избегает не определенного поведения .

Следующий наивный подход не является надежным, поскольку нет гарантии, что тип f может представлять std :: numeric_limits :: max () supating-point> nupe-point-point> wating-point-point>. />
#include
#include
#include

template
bool is_safe_conversion(F x)
{
static_assert(std::is_floating_point_v);
static_assert(std::is_integral_v);

// 'fmax' may have a different value than expected
static constexpr F fmax = static_cast(std::numeric_limits::max());

return std::abs(x)

есть идея? < /p>

Подробнее здесь: https://stackoverflow.com/questions/513 ... conversion
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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