2012-03-29 55 views
0

我的功能是以某種方式改變一個數字,我把它傳遞給零,即使我設置了一個任意數字的變量,函數將其更改爲零?
這是怎麼回事?這怎麼可能呢?函數設置號碼本身爲零?

變量在這裏被定義

int count,i,binnumber,*histo,tempmax,tempmin; 

float *data,y,temp,binwidth; 

tempmin = floor(temp); 
binnumber = ceil(sqrt((count-1)));   
//out_stream << binnumber << endl;   
binwidth = abs(tempmax-tempmin); 
binwidth = binwidth/binnumber; 

for (int i=0; i<count; i++) 
{ 
    data[i] = data[i] - tempmin; 
    out_stream2 << data[i] << "\n"; 
} 
func.histogram(data ,histo, binwidth, binnumber);  //create array for histogram use 
int holder = 0; 

,這傳遞給這裏的功能,從而改變其零

void DSP1D::histogram(float *data,int *histo, float _binwidth, int _binnumber) 
{ 

    binwidth = _binwidth; 
    cout << "binwidth is: " << binwidth << endl; 
    binnumber = _binnumber; 
    for(int i = 0; i < count; i++) 
    { 
     binnumber = data[i]/binwidth; 

     binnumber = binnumber/binwidth ; 
     //binnumber = floor(binnumber); 
     //cout << binnumber << "bin one\n" ; 
     histo[binnumber] = histo[binnumber] + 1 ; //possibly import sorted numberlist and place sorted numbers in appropriate bins 
    } 
} 

binwidth是成爲零值的所有的時間和我們使用

cout << "binwidth is: " << binwidth << endl;

檢查值, 請幫忙嗎?

+5

什麼變量變爲零? – 2012-03-29 19:01:27

+1

什麼數字更改爲零? – Chad 2012-03-29 19:02:27

+0

什麼數字變成零? 'binwidth'定義在哪裏?它是全球性的嗎?它是什麼類型? – user1118321 2012-03-29 19:02:41

回答

0

從我可以從你的代碼告訴我們 - 有一些問題:

int count,i,binnumber,*histo,tempmax,tempmin; 

float *data,y,temp,binwidth; 

tempmin = floor(temp); 
binnumber = ceil(sqrt((count-1)));   
//out_stream << binnumber << endl;   
binwidth = abs(tempmax-tempmin); 
binwidth = binwidth/binnumber; 

1)您使用的溫度,tempmax,算上所有的沒有首先給它們分配。這意味着他們會在它們中產生一些隨機值(無論內存中已存在每個變量的值)。他們應該是什麼,你是否遺漏了代碼?如果count小於1,則由於sqrt((count - 1)),您也必須在程序中使用某種虛數,並且binnumber也是隨機的(如果程序不停止運行,因爲這個基本的cmath sqrt函數並不涉及虛數)

2)即使溫度沒有設置爲任何值,tempmin仍被設置爲臨時溫度,所以tempmin也是隨機的。

3)binwidth被設置爲tempmax-tempmin的絕對值,它們都有隨機值,所以binwidth也會有一些隨機值。 4)如果你到了binwidth = binwidth/binnumber的那一行,意識到因爲你使用了所有的整數,所以你將返回一個int(基本上剩下的部分將被丟棄),所以你需要如下所示:

binwidth =(float)binwidth/binnumber,或binwidth = bindwidth /(float)binnumber,或binwidth =(double)binwidth/binnumber,或bindwidth = binwidth /(double)binnumber 。

加 - 當然,如果binnumber爲0(它可能是在這裏,因爲它是隨機的,你可以得到一個崩潰),你可能想要做這樣的事情:

如果(binnumber)binwidth =(雙)binwidth/binnumber; - 或某種解決方案

如果(binnumber)與if(binnumber!= 0)相同,則在C和C++中,所有非0值都爲true且0爲false。

所以是的,基本上你的代碼有很多問題,並且我建議你不要在表達式或公式中使用變量而不事先指定它們,然後嘗試打印出binnumber的值代碼之前的各個地方。

等一下,你甚至沒有分配*數據,有可能做你對數據做的事情,你的計算機通常會允許它到一個點,只要長度不大,是否有一個來自你的代碼的大部分缺失?你的變量在哪裏被初始化?