浮点格式数组的平均值
Posted
技术标签:
【中文标题】浮点格式数组的平均值【英文标题】:The average of an array in float format 【发布时间】:2020-06-10 13:09:35 【问题描述】:我如何得到除法的浮点结果?
虽然我将平均数组定义为浮点数。
int main()
const int Number = 20;
int Fibonacci[Number];
float average[Number];
for ( int i =0; i <= Number; i++ )
if ( i == 0 )
Fibonacci[i] = 0;
else if ( i == 1 )
Fibonacci[i] = 1;
else
Fibonacci[i] = Fibonacci[i -1] + Fibonacci[i -2];
//average[i] = (Fibonacci[i -1] + Fibonacci[i -2])/2 ;
cout<< "The first 20 Fibonacci series numbers are: \n";
for ( int i = 1; i <= Number; i++)
cout<< Fibonacci[i]<<endl;
cout<< "The average adjacent array numbers are: \n";
for ( int i = 3; i <= Number; i++)
average[i] = (Fibonacci[i]/2);
//cout.precision(0);
问题来了
cout<< average[i]<<endl; <-----here the problem!!
return 0;
感谢您的帮助。 提前致谢。
【问题讨论】:
你在做整数除法。Fibonacci
包含 int
,1
也是一个 int。您想先将其中一个值转换为浮点数。例如:average[i] = (Fibonacci[i]/2.f)
这能回答你的问题吗? Why does dividing two int not yield the right value when assigned to double?
for ( int i =0; i <= Number; i++ )
应该是 for ( int i =0; i < Number; i++ )
。正如所写,循环的最后一次传递离开了数组的末尾。
【参考方案1】:
当你做除法时,你是在做一个整数除法,所以你不会得到浮点结果。一个简单的修复方法如下:
average[i] = Fibonacci[i] / 2.0f;
请注意,如果 /
的操作数之一是 float
,那么您将得到浮点除法。
另外,请注意您的循环索引在数组中太远了。你需要在Number
之前停下来,像这样:
for ( int i = 0; i < Number; i++)
这是因为有效的数组索引来自0 .. (Number - 1)
。
【讨论】:
【参考方案2】:如果Fibonacci[i]
是int
类型,那么(Fibonacci[i]/2)
是一个整数除法,得到一个整数值(没有任何小数部分)。将此积分结果分配给浮点数不会改变您已执行积分除法的事实。
您可以通过将其中一个操作数设为浮点值来强制进行浮点除法。
所以 (1) 使用任何一个演员...
((float)Fibonacci[i])/2
或(2)除以2.0f
(这是一个浮点值):
Fibonacci[i]/2.0f
【讨论】:
2.0
是double
。 2.0f
是 float
。【参考方案3】:
只需像这样使用类型转换fibonacci
数组-
average[i] = (float)Fibonacci[i]/2;
因为为了获得浮点结果,/
操作中使用的两个变量中的任何一个都必须是浮点数。
【讨论】:
@PeteBecker 谢谢。我只是使用他的参考资料,修改最少。但是,我已经更新了我的解决方案。以上是关于浮点格式数组的平均值的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中以浮点精度从 CMSampleBuffer 获取“CIAreaAverage”的 RGB 平均值
RuntimeError:只能计算浮点类型的平均值。取而代之的是字节。对于平均值 += images_data.mean(2).sum(0)