Существует ли безопасный способ надежно определить, может ли интегральный тип 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
Надежное обнаружение переполнения конверсии с плавающей точкой/целочисленным типом ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Точное и надежное обнаружение углов (зашумленное изображение, грязный объект)
Anonymous » » в форуме Python - 0 Ответы
- 35 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему бинарный литерал для байта с негативным знаком считается целочисленным типом?
Anonymous » » в форуме JAVA - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-