Есть ли в этом отрывке ошибка,где если есть и как исправить?

float square( double number )
{
double number
return (float)number * number;}

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

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

Формальная?

double number

эта строка совершенно лишняя.

Но какой смысл в том, чтобы при входе double возвращать float?

→ Ссылка
Автор решения: Andrei

Должно быть примерно как-то так:

#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;
}
→ Ссылка
Автор решения: Stanislav Volodarskiy

Объявление локальной переменной double number конфликтует с параметром с тем же именем. И написано без точки с запятой. Его надо убрать.

Выражение (float)number * number устроено как float * double - приведение применяется к первому аргументу. В Implicit conversions находим пункт:

  1. 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;
}
→ Ссылка