Я пытаюсь создать пользовательскую функцию pow (), но мои циклы for не работают - C - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь создать пользовательскую функцию pow () для сравнения результатов реальной функции pow, но она не работает.Когда база равна 1, она работает нормально, но после этого функция MyPower вернет 1 для чего-либо до первой степени, так что будет сказано.

Тестирование 1.000000 на 1 мощность
Тестирование 1.000000 на 2 мощность
Тестирование 1.000000 на 3 мощность
Тестирование 1.000000 на 4 мощность
2.000000 на 1 - это 2,000000, результат1,000000
2,000000 для 2 - 4,000000, результат 2,000000
2,000000 для 3 - 8,000000, результат 4,000000
2,000000 для 4 - 16,000000, результат 8,000000

, и он будетпродолжать быть на одно значение показателя меньше для всех остальных баз.Я считаю, что ошибка происходит в функции MyPower (), но я не уверен.

#include <stdio.h>
#include <math.h>

double base, x;
int exponent, i, z;

double MyPower(double base, int exponent);
void DoTest(double base, int exponent);


double MyPower(double base, int exponent){
    double x = 1;
    for(z = 1; z < exponent; z++){
        x *= base;
    }
    return x;
}

int main(void){
    int i, j;
    for(i = 1; i < 5; i++){
        for(j = 1; j < 5; j++){
            DoTest(i,j);
        }
    }
}


void DoTest(double base, int exponent){
    double test1 = MyPower(base, exponent);
    double pow_result = pow(base, exponent);
    if(test1 == pow_result){
        printf("Testing %f to the %d power\n", base, exponent);
    }
    else{
        printf("%f to the %d is %f, result is %f\n", base, exponent, pow_result, test1);
    }
}

1 Ответ

1 голос
/ 24 сентября 2019

Проблема возникает из условия в вашем цикле.

Комбинация начального значения, которое вы даете z, и условия выхода заставляет его пройти на одну итерацию меньше, чем вы хотитесделать:

for(z = 1; z < exponent; z++){
    x *= base;
}

Вам нужно изменить его на:

for(z = 0; z < exponent; z++){

или:

for(z = 1; z <= exponent; z++){

Небольшой совет при отладкепрограммы

Это может показаться старомодным, но попытка запустить свои алгоритмы ручкой и бумагой поможет вам обнаружить подобные ошибки.Без сомнения, вы будете становиться все более и более опытным, поскольку вы становитесь более опытным.Добро пожаловать в StackOverflow!

...