Duvida em Codigo C/C++

Oii,tou este server mas não está calculando direito alguem me pode ajudar:

// Server side C/C++ program to demonstrate Socket programming
    #include <iostream>
    #include <unistd.h>
    #include <stdio.h>
    #include <sys/socket.h>
    #include <stdlib.h>
    #include <netinet/in.h>
    #include <string.h>
    #include <pthread.h>
    #include <iomanip>
    #include <cmath>

#define SIZE 70
#define PORT 65432

void * linearregression(void *);
using namespace std;

char buffer[1024] = {0};
char previousBuffer[1024];

int main(int argc, char const *argv[])
{
    int server_fd, new_socket, valread;
    struct sockaddr_in address;
    int opt = 1;
    int addrlen = sizeof(address);
    char hello[] = "Hello from server";



    pthread_t s;

    // Creating socket file descriptor
    if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0)
    {
        perror("socket failed");
        exit(EXIT_FAILURE);
    }

    // Forcefully attaching socket to the port 65432
    if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT,
                   &opt, sizeof(opt)))
    {
        perror("setsockopt");
        exit(EXIT_FAILURE);
    }
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = INADDR_ANY;
    address.sin_port = htons( PORT );

    // Forcefully attaching socket to the port 65432
    if (bind(server_fd, (struct sockaddr *)&address,
             sizeof(address))<0)
    {
        perror("bind failed");
        exit(EXIT_FAILURE);
    }
    if (listen(server_fd, 3) < 0)
    {
        perror("listen");
        exit(EXIT_FAILURE);
    }
    if ((new_socket = accept(server_fd, (struct sockaddr *)&address,
                             (socklen_t*)&addrlen))<0)
    {
        perror("accept");
        exit(EXIT_FAILURE);
    }
    while (true){
        valread = read( new_socket, buffer, 1024);
        buffer[valread]=0;
        printf("%s\n",buffer );

        pthread_create(&s,NULL,&linearregression,NULL);
        pthread_join(s,NULL);
        printf(" n\n*******************************************************************************\n\n");


}
        send(new_socket, hello, strlen(hello), 0 );
        printf("Hello message sent\n");
        return 0;
}

void * linearregression(void * arg)
{
    int*newsockfd=(int*)arg;
    string string1(buffer);
    string string2(previousBuffer);

    int i = 0;
    int j = 0;
    int k,n;
    float a,b;
    double x[n],y[n];
    double xsum=0,x2sum=0,ysum=0,xysum=0;                //variables for sums/sigma of xi,yi,xi^2,xiyi etc

    for(i=1;i<=n;i++)
 {
  cout<<"x["<< i <<"] = ";

  cout<<"y["<< i <<"] = ";

 }

    for (i=1; i<n; i++)

    {

        xsum=xsum+x[i];                        //calculate sigma(xi)

        ysum=ysum+y[i];                        //calculate sigma(yi)

        x2sum=x2sum+pow(x[i],2);                //calculate sigma(x^2i)

        xysum=xysum+x[i]*y[i];                    //calculate sigma(xi*yi)

    }

    b = (n*xysum-xsum*ysum)/(n*x2sum-xsum*xsum);
    a = (ysum - b*xsum)/n;

     /* Displaying value of a and b */
 cout<<"Calculated value of a is "<< a << "and b is "<< b << endl;
 cout<<"Equation of best fit is: y = "<< a <<" + "<< b<<"x";

 return(0);
}

Exemplo de Erro:

20.0,27.267952

Calculated value of a is -nanand b is -nan
Equation of best fit is: y = -nan + -nanx n

Nao entendi essa saida de erro muito bem, mas geralmente quando aparece NAN no erro é por causa de divisão por zero. Provavelmente no calculo do valor de A ou B, o valor do divisor de algum deles esta sendo Zero.

@Sofia_c, as variáveis k e n são utilizadas sem serem inicializadas e por padrão variáveis não inicializadas são valoradas com 0 pelo compilador. Com isso, os divisores dos cálculos das variáveis a e b são iguais a zero o que resulta no NaN.

Provavelmente esse problema deve estar sendo denunciado pelo compilador durante a compilação.

Esse código é um server socket programming e eu estou tentado calcular os dados que vêem do client. Só que ai dá esse erro,e não estou entendendo direito.

@brunonzanette te apontou o erro, você até declara ‘n’:

int n

mas não inicializa:

n = 12 //ou o valor que realmente quer

por isso:

a = (ysum - b*xsum)/n;
// a  = algo dividido por zero, resulta em um 'not a number', nan

Divisão por zero não é definido na matemática, dependendo da plataforma fica um pouco confuso pois divisão por zero não é tratado como uma hardware exception que resultaria na falha da execução. E pode acabar passando batido como um warning do compilador.