Функция getNthRoots неправильные ответы

0

Поэтому у меня есть функция

 Vector getNthRoots(double a, double b, double c, int n)
{
    Vector v;
    int i;
    v.length = 0;
    double m, a2, b2, c2;
    if (n % 2 == 0)
    {
        a2 = a;
        b2 = b;
        c2 = c;
        if (a<0)
            a2 = a*(-1);
        if (b<0)
            b2 = b*(-1);
        if (c<0)
            c2 = c*(-1);
        m = floor(pow(max(a2, b2, c2),1/n));
        for (i = 1; i <= m; i++)
        if (pow(i, n) >= min(a2, b2, c2) && pow(i, n) <= max(a2, b2, c2))
        {
            v.values[v.length] = i;
            v.length++;
            v.values[v.length] = (-1)*i;
            v.length++;
        }
        return v;
    }
    else {
        for (i = ceil(pow(min(a, b, c),1/n)); i <= floor(pow(max(a, b, c),1/n)); i++)
        if (pow(i, n) >= min(a, b, c) && pow(i, n) <= max(a, b, c))
        {
            v.values[v.length] = i;
            v.length++;
        }
        return v;
    }
}

Эта функция должна давать вам числа при мощности n (число ^ n), которые находятся в интервале min (a, b, c) и max (a, b, c);

Другие функции/заголовки

double max(double a, double b, double c)
{
    if (a >= b && a >= c)
        return a;
    if (b >= a && b >= c)
        return b;
    if (c >= a && c >= b)
        return c;
    return a;
}

double min(double a, double b, double c)
{
    if (a <= b && a <= c)
        return a;
    if (b <= a && b <= c)
        return b;
    if (c <= a && c <= b)
        return c;
    return a;
}

#include <iostream>
#include <cmath>
using namespace std;

#define MAX_ARRAY_LENGTH 100

struct Vector
{
    unsigned int length;
    int values[MAX_ARRAY_LENGTH];
};

Кажется, я не могу получить хороший ответ. Например

для getNthRoots (32,15,37,5) он должен вернуть вектор [2], потому что 2 ^ 5 = 32, который принадлежит интервалу [15,37], но я ничего не получаю и не получаю NthRoots (32,1,7, 5) он должен вернуть вектор [1,2], но я получаю только 1 как ответ

Я предполагаю, что здесь проблема for (i = ceil(pow(min(a, b, c),1/n)); я <= floor(pow(max(a, b, c),1/n)); i++) но я не знаю, как я мог это исправить

Теги:

1 ответ

0

1/n оценивается как 0, потому что он оценивается как целочисленное выражение. Попробуйте заменить все "1/n" на "1.0/n".

Постарайтесь обрабатывать случай, когда n равно 0.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню