@HoShik

Почему некорректно находит произведение чисел?

#include <stdio.h>
#include <iostream>

float mult(float count,...)
{
    float comp=1.0;
    for(float *ptr=&count; count>0; count--)
    {
        comp*=*(++ptr);
    }
    return comp;
}
int main()
{
    std::cout<<"Composition of the number 1.0,4.0,94.0 = "<<mult(3.0,1.0,4.0,94.0)<<std::endl;
}

Выводит 0. В чем проблема?
  • Вопрос задан
  • 131 просмотр
Решения вопроса 1
@res2001
Developer, ex-admin
Почему вы в функции с переменным количеством аргументов не используете стандартный механизм для работы с аргументами в подобных функциях (#include <cstdarg>)?

Поставьте отладочный вывод в цикл, где выведите значение count, а заодно и *ptr и comp. То же самое можно быстро посмотреть в отладчике затратив минуты 3 на все. Выводите значение floatов с большим количество знаков после запятой (10-15).
Вы будете удивлены тому, что во float 3.0 это не обязательно равно 3, ну и т.д. То же самое относится к любым типам с плавающей точкой.
Передавайте первым аргументом uint32_t, вторым и следующим float. Тогда все будет нормально. Код, конечно, придется немного переделать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы