[問題] 標準差的程式碼

作者: williams7442 (我只剩下嘴砲了)   2014-05-31 18:31:04
這是從百度知道搜尋到的
可是小弟有幾行一直看不太懂
#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這又是甚麼意思
方差也變成負數了
作者: damody (天亮damody)   2014-05-31 20:19:00
會有 -1.#J是數字爆炸了
作者: MOONRAKER (㊣牛鶴鰻毛人)   2014-05-31 21:27:00
你自己寫一個找最小值的程式min設0看看
作者: williams7442 (我只剩下嘴砲了)   2014-06-01 01:05:00
數字上限爆炸的情況不知道怎麼解決
作者: MOONRAKER (㊣牛鶴鰻毛人)   2014-06-01 12:40:00
你以為2147483647的平方根有多大…

Links booklink

Contact Us: admin [ a t ] ucptt.com