@3xa1t3d

Как в С++ проверить double на целочисленность?

Суть максимально проста. Нужна функция типа:

int isInteger(double num)
{
if (num целочисленный)
return (0);
return(1);
}

Второй день уже голову ломаю. Это вообще реально сделать?
  • Вопрос задан
  • 214 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
#include <cmath>
int isInteger(double num)
{
    return num == trunc(num);
}

Ну и нужно понимать, что с некоторого (в зависимости от конкретной разрядности double) значения порядка любой double станет целочисленным из-за ограниченности длины мантиссы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vanyamba-electronics
При обработке вещественных чисел следует определиться, которая точность вас устраивает в данном случае.
В идеале 1.0 - это явно целочисленная дробь, но на практике возникает вопрос: а 0.99999999 - это достаточное приближение, чтобы принимать это число за 1.0?
Поэтому функция должна иметь параметр точности:
bool is_integer(double val, double precision = 0.000005)
{
    return abs(val - round(val)) < precision;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы