【发布时间】:2012-03-29 18:59:12
【问题描述】:
我的函数以某种方式更改了我将其传递为零的数字,即使我为变量设置了任意数字,该函数也会将其更改为零?
到底是怎么回事?这怎么可能?
这里定义了变量
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;
检查值, 请帮忙?
【问题讨论】:
-
什么数字变为零了?
binwidth在哪里定义?是全球性的吗?它是什么类型的? -
你如何确定它是否变为零?如果启用优化,调试器监视可能会报告误导值。
-
对不起,binwidth 变为零,我们使用
cout << "binwidth is: " << binwidth << endl;来检查值 -
_binwidth的值是多少?我询问了上面的类型,因为如果它不是浮点数或双精度数,那么类型转换可能会导致舍入并在您不期望时将其设为 0。我询问了它的范围(全局或本地),因为您使用的变量可能与您想象的不同。另外,您是否尝试过进入调试器并检查值?打印格式可能会导致它显示为四舍五入,即使它有另一个值。 -
binwidth和所有其他相关类成员的定义是什么?我猜 binwidth 为零只是因为传递给方法的_binwidth为零。