» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


发新话题
打印

【编程相关】CPP的问题……求大伙帮忙……

#include <vector>

std::vector<float> my_array;

// 存数
my_array.push_back(0.0f);

// 求平均
float sum = 0.0f;
for (size_t i=0; i<my_array.size(); i++)
{
sum += my_array;
}
float result = sum / 3600.0f;


本帖最近评分记录
  • shixn 激骚 +8 精品文章 2010-7-4 12:46

TOP

引用:
原帖由 carnon 于 2010-7-4 11:49 发表


这程序有个大缺陷

sum精度不够,要回绕了
做算术最容易让人忽略的问题就是变量类型精度
lz 又没说要多高的精度,也没说是3600个多大的数



TOP

引用:
原帖由 猫猫猫 于 2010-7-4 18:07 发表


for 里面的 i 用在哪里?
代码里写了,提交帖子好像被系统给删掉了,233

顺便回楼上某些贴,lz这意思看起来也就是鼓捣个作业之类的罢了,至于搬出什么溢出吗,那索性用大数计算好了,有现成的也可以自己写,1024位够不够啊?
还有什么vector的性能,你研究过vector下面的内存管理吗?就lz这么点数据,提前给vector reserve 10w个元素,以后push_back几天才能重分配几次内存?


TOP

引用:
原帖由 ypandoo 于 2010-7-4 19:59 发表
回ls 我说的是vector直接存取对象的性能, vector存取每一个对象都会调用对象的拷贝构造函数 我并没有搬出溢出之类的。。请ls不用动肝火。。
说溢出是在你楼上的,

另外对于first class数据类型,并不存在过高的性能瓶颈,编译器实际生成的只是个memcpy,要避免拷贝构造函数调用也很容易,在vector里面保存对象指针即可。为了避免内存碎片还可以用mem pool。
这种话题要说细了,比如说用std::list 代替std::vector,虽然某种程度上是轻松了(避免了vector内部的mem扩容操作),但是内存使用会每个对象增大至少4个字节,要是保存数百万节点,浪费非常可观。

当然这些我想对于lz完全没有任何意义。
最简单的解决办法,fopen fwrite fclose往硬盘上存就是了。求什么平均的时候从硬盘读取计算就是了。听起来慢,实际上也就几秒。

TOP

发新话题
     
官方公众号及微博