[問題] 標準差的程式碼

看板C_and_CPP (C/C++)作者時間12年前 (2014/05/31 18:31), 編輯推噓0(004)
留言4則, 3人參與, 最新討論串1/2 (看更多)
這是從百度知道搜尋到的 可是小弟有幾行一直看不太懂 #include <stdio.h> #include <math.h> #define MAX 50 main(){ char *p,str[301]; /*int 最大為5位數,加上分隔空格為6*50=300字節*/ int arr[MAX]; int i,num,max,min,tem; float ave,var,stdvar; gets(str); p=(char *)strtok(str," "); if(p!=NULL) arr[0]=atoi(p); /*atoi(p)將字串常數轉為整數*/ //arr[0]=atoi(p) 例如輸入:5 4 3 9 只讀到5? i=1; while(p!=NULL){ p=(char *)strtok(NULL," "); //分別讀取 4 3 9 if(p!=NULL){ arr[i]=atoi(p); //arr[1]=4 arr[2]=3 arr[4]=9 是這個意思? i++; } } num=i; //i=4,輸入4個數字 min=32767; max=0; //怎麼不設成min=0;max=32767; tem=0; for(i=0;i<num;i++){ if(arr[i]>max) max=arr[i]; if(arr[i]<min) min=arr[i]; tem+=arr[i]; } //for到 }這有點一頭霧水,這是甚麼意思? ave=(float)tem/num; tem=0; for(i=0;i<num;i++) tem+=(arr[i]*arr[i]-ave*ave); //個別輸入數平方總和-平均數的平方? var=(float)tem/num; stdvar=sqrt(var); printf("\n數字個數: %d",num); printf("\n最大值: %d ",max); printf("\n最小值: %d",min); printf("\n平均值: %.2f",ave); printf("\n方差: %.2f ",var); printf("\n標準差: %.2f ",stdvar); getch(); } 這個程式輸入 1 46325 46325大概在超出一點點會讓標準差的平方(方差) 超過5XXXX-XXXX約9位數字 int不是至少2147483647嗎? 10位數字 之後標準差會出現 -1.#J這又是甚麼意思 方差也變成負數了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.25.27.64 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1401532266.A.106.html

05/31 20:19, , 1F
會有 -1.#J是數字爆炸了
05/31 20:19, 1F

05/31 21:27, , 2F
你自己寫一個找最小值的程式min設0看看
05/31 21:27, 2F

06/01 01:05, , 3F
數字上限爆炸的情況不知道怎麼解決
06/01 01:05, 3F

06/01 12:40, , 4F
你以為2147483647的平方根有多大…
06/01 12:40, 4F
文章代碼(AID): #1JYQzg46 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1JYQzg46 (C_and_CPP)