Проблема с функцией abs() в С++

Имеется код:

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
    setlocale(0, "");
    cout << "------------------------------------------" << endl;
    cout << "\tЧисло\t\tРешение" << endl;
    cout << "------------------------------------------" << endl;
    for (double i = -4.0; i <= 4.0; i += 0.5) {
        cout << "\t" << i << "\t\t" << abs(i - 2.0) + abs(i + 1.0) << endl;
    }
    cout << "------------------------------------------" << endl;
    return 0;
}

Функция abs должна вернуть числа с плавающей точкой. А возвращаются целочисленными, вот результат:

введите сюда описание изображения

Замена abs на fabs (что бы это не значило) не помогает. Замена math.h на cmath тоже не помогает.


Ответы (1 шт):

Автор решения: Harry

Вы просто подобрали числа так, что получаются значения типа ###.000.

Возьмите другой шаг — и увидите то, что хотите :)

Смотрите...

abs(i - 2.0) + abs(i + 1.0)

При i >= 2 имеем значение 2*i - 1. Для целых и полуцелых чисел результат целый.

При 2 > i > -1 получаем результат 3. Тоже целое для любых i.

При i < -1 имеем 1 - 2*i — что опять же для целых и полуцелых чисел дает целочисленный результат...

введите сюда описание изображения

Взгляните: https://ideone.com/yWAtIE

→ Ссылка