Попытка приблизить число Эйлера в C - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь приблизить число Эйлера, используя формулу (1+ (1 / n)) ^ n. Компилятор говорит мне, что есть «ожидаемое выражение перед« двойным »». Вот код:

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

int main()
{
    int x, y, power;
    int num = 1;
    int position = 1;
    while (position <= 100)
    {
        num = 1/num;
        num = num + 1;
        x = num;
        power = double pow(x, x);
        printf("%f", power);
        position += 1;
        num = position;
    }
}

Ответы [ 3 ]

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

Если вы хотите, чтобы число было двойным (число с десятичными числами), вам нужно определить его как двойное, а не целое число. У меня есть этот код, который должен решить вашу проблему. Также обязательно скомпилируйте gcc FILEPATH -lm -o OUTPUTPATH, если вы используете UNIX.

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

int main()
{
    double x, y, power, num = 1; //doubles allow for decimal places so declare it as double
    int position = 1; //Position seems to only be an integer, so declare it as an int.
    while (position <= 100)
    {
        num = 1/num;
        num++;
        x = num;
        power = pow(x, x);
        printf("%f", power);
        position += 1;
        num = position;
    }
}

Другой вариант - цикл for:

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

int main()
{
    double x, y, power, num = 1;
    for (int i = 1; i <= 100; i++) {
        num = 1/num;
        num = num + 1;
        x = num;
        power = pow(x, x);
        printf("%f", power);
        position += 1;
        num = i;
    }
}

Если вы пытаетесь приблизиться к числу Эйлера, я не понимаюне понимаю, почему бы просто не попробовать что-то вроде:

static const double E = 2.718281828459045;

Я просто исправил синтаксические ошибки в вашей программе, но я не думаю, что это действительно даст вам E. См. эту страницу о расчете E в C.

0 голосов
/ 24 октября 2019

Я исправил некоторые ошибки в вашем коде и думаю, что он должен работать сейчас;однако стиль, который я не трогал, сбивает с толку.

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

int main()
{
    double power;  //stores floating point numbers!
    double num = 1;//stores floating point numbers!
    int position = 1;
    while (position <= 100)
    {
        num = 1/num;
        num = num + 1;
        power = pow(num, position); //x not needed, this is what you ment
        printf("%f\n", power); //%d outputs decimal numbers, f is for floats
        position += 1;
        num = position;
    }
}

Чтобы улучшить ваш код, я бы предложил упростить его. Что-то вроде этого

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

int main()
{
    double approx;
    for(int iter=1; iter<=100; iter++){
        approx=pow((1+1./iter),iter);
        printf("%f\n", approx);
    }
}

гораздо легче понять.

0 голосов
/ 24 октября 2019

Я не мастер C, но не просто вызываю double объявление типа, а не приведение типа? Разве это не будет power = (double) pow(x, x);, если вы используете приведение типа? см .: https://www.tutorialspoint.com/cprogramming/c_type_casting.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...