Проблема с функцией 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

