функция — деление 2 чисел с плавающей запятой в C ++ дает разные результаты в зависимости от используемого метода

В C ++, почему деление 2 чисел с плавающей запятой через 2 разных механизма (встроенное и с помощью вызова функции) дает разные результаты, как показано ниже?

После следующих вычислений, где 5 делится на 4, f1 = 0 и f2 = 0,8.

#include <iostream>
using namespace std;

int main() {
float f1 = 4 / 5;
float f2 = FloatDivision(4, 5);
cout << "f1 equals " << f1 << endl;
cout << "f2 equals " << f2 << endl;
cin.ignore();
}

float FloatDivision(float f1, float f2) {
if (f2 != 0) {
return f1 / f2;
} else {
cout << "Error: The denominator cannot be zero" << endl;
return 0;
}
}

0

Решение

4/5 — целочисленное деление. Вы определили их как таковые. Тогда как в вашей функции деления вы определили их как числа с плавающей точкой.

Для f1 попробуйте

float f1 = 4.0 / 5.0;
3

Другие решения

в случае

  float f1 = 4 / 5;

Это целочисленное деление, которое приводит к 0, а затем оно конвертируется в число с плавающей точкой и остается 0.

в случае вызова функции DivFloat он принимает аргументы с плавающей точкой, следовательно, 4 и 5 сначала конвертируются в float, а затем происходит деление. Отсюда результаты 0.8.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector