C - pthread возвращает неожиданный результат - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь разобраться в проблеме с pthreads в C. Хотя мой второй поток возвращает значение правильно, первый просто дает мне (я полагаю) адрес памяти.

Код должен выполнять следующее:

Создать 2 потока, которые вычисляют факториал и экспоненциальное значение заданного числа из консоли.

Факториал кодируется какФункция и экспоненциальный калькулятор в основном коде.

Спасибо за любую помощь!

#include <pthread.h>
    #include <stdio.h>

void *fac_x(void *x_void_ptr)
{
    int *x_ptr = (int *)x_void_ptr;
    int counter = *x_ptr;

    for (int i = 1; i  < counter ; i++) {
        *x_ptr *= i;
    }
    printf("x factorising finished\n");
    return NULL;
}
int main()
{
    int x,y, counter;
    printf("Enter an integer: ");
    scanf("%d",&x);
    y = x;
    counter = y;

    printf("Input = %d\n",x);

    pthread_t fac_x_thread;

    if(pthread_create(&fac_x_thread, NULL, fac_x, &x)) {

        fprintf(stderr, "Error creating thread\n");
        return 1;
    }
    while (counter != 0) {
        y *= y;
        counter--;
    }
    if(pthread_join(fac_x_thread, NULL)) {
        fprintf(stderr, "Error joining thread\n");
        return 2;
    }
    printf("Factorial: %d \nExponential: %d\n", x, y);

    return 0;
}

1 Ответ

0 голосов
/ 02 февраля 2019

первый только дает мне (я предполагаю) адрес памяти.

это не адрес, вы (пытаетесь) вычислить очень большое значение, у вас очень быстрое переполнение

для 3 это уже 6561 (3 * 3 = 9), 9 * 9 = 81, и, наконец, 81 * 81 = 6561)

для 4 значение 2 ^ 32 слишком велико в 32 битах (4 * 4 = 16, 16 * 16 = 256, 256 * 256 =65536 и, наконец, 65536 * 65536 = 4294967296 = 2 ^ 32)

для 5, значение равно 23283064365386962890625 = 0x4EE2D6D415B85ACEF81> 2 ^ 75 слишком велико для 64b!

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