Странно работающий float в С++
Я Python-программист, только начинаю осваивать С++. Решил написать функцию для вычисления процента из данных - сколько всего, и сколько из. Мой код был фактически переведён с кода на Python, в код на С++. В то время, как код на Python работает как положено, вот он:
def percent(frst, scnd):
coef = 100 / frst
res = scnd * coef
return res
При входных данных в виде 6400, 234, выдаётся результат:
3.65625
А вот его "порт" на C++:
float Percent (int first, int second) {
float coefficient = 100 / first;
float result = second * coefficient;
return result;
}
При тех же самых входных данных, почему-то, результатом является:
0.000000%
Компилятор - g++ (GCC) 10.2.1 20201203.
Ответы (1 шт):
Измените сигнатуру функции:
float Percent(float first, float second);
Ошибка происходит потому, что сначала Вы делите целое на целое, а уже затем преобразуете результат, т.е. ноль, в тип с плавающей запятой. Происходит это в строке 2:
float coefficient = 100 / first; // 100 / 6400 = 0
P.S.:
Стоит сказать, что код на C++ не является аналогом кода на Python. Python в большинстве случаев использует для представления чисел с плавающей запятой тип double:
Almost all platforms map Python floats to IEEE-754 “double precision”. 754 doubles contain 53 bits of precision
Поэтому более точным аналогом была бы следующая функция:
double Percent(double first, double second)
{
double coefficient = 100 / first;
double result = second * coefficient;
return result;
}