Есть ли в этом отрывке ошибка,где если есть и как исправить?
float square( double number )
{
double number
return (float)number * number;}
Ответы (3 шт):
Формальная?
double number
эта строка совершенно лишняя.
Но какой смысл в том, чтобы при входе double возвращать float?
Должно быть примерно как-то так:
#include <stdio.h>
float square( double number );
int main(int argc, char *argv[])
{
float result = square(2);
printf("Result: %f\n", result);
return 0;
}
float square( double number )
{
return (float)number * number;
}
Объявление локальной переменной double number конфликтует с параметром с тем же именем. И написано без точки с запятой. Его надо убрать.
Выражение (float)number * number устроено как float * double - приведение применяется к первому аргументу. В Implicit conversions находим пункт:
Otherwise, if one operand is double, double complex, or double imaginary (since C99), the other operand is implicitly converted as follows:
- integer or real floating type to double
Перевод: если второй аргумент double, то и первый аргумент к нему приведётся.
То есть то что мы написали это ((double)(float)number) * number. Привели double к float (потеряли точность), привели обратно.
И так как значение функции типа float, то всё выражение неявно приводится к float.
В общем получилось так:
float square(double number) {
return number * number;
}
Но какой в этом смысл? Эта функция ничем не лучше (а иногда и хуже) чем
double square(double number) {
return number * number;
}