免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yzc2002
打印 上一主题 下一主题

求平均值 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2005-09-30 11:18 |只看该作者

求平均值

如果在大数算法中使用1024进制的话,就更方便了

论坛徽章:
0
12 [报告]
发表于 2005-09-30 11:28 |只看该作者

求平均值

能不能讲讲什么是大数算法?

论坛徽章:
0
13 [报告]
发表于 2005-09-30 11:32 |只看该作者

求平均值

算法源自递归,如果一个问题让你感觉困难。。。递归吧!
假定第n步得到了一个整数的平均值An和一个累计误差Dn(|Dn| < n),现加入了一个新的数Vn,算An+1和Dn+1。。。

论坛徽章:
0
14 [报告]
发表于 2005-09-30 11:48 |只看该作者

求平均值

这个速度太慢, 要做O(n)次除法和乘法

用我的算法只要做O(log(n))次乘法

论坛徽章:
0
15 [报告]
发表于 2005-09-30 11:57 |只看该作者

求平均值

你是怎么做1000个数的平均值的?

论坛徽章:
0
16 [报告]
发表于 2005-09-30 15:32 |只看该作者

求平均值

其实可以不用到除法的,由于它的数据量刚好是1M啊,可以利用移位啊
当然,如果不是1M就不好办了,不过要保证精确度,我看还是得先做好大数求和

论坛徽章:
0
17 [报告]
发表于 2005-09-30 19:22 |只看该作者

求平均值

刚注册的,想发个贴感觉一下,感觉大家知识都很渊博,佩服之余,还得多多学习啊.

论坛徽章:
0
18 [报告]
发表于 2005-09-30 23:41 |只看该作者

求平均值

整数?
也就是说INT类型的?32位的整数?
好办得很啊
32位整数最大才多少?
gcc不是有long long 类型么?好象C99标准要求至少是64位的

  1. /* Minimum and maximum values a `signed int' can hold.  */
  2. #ifndef __INT_MAX__
  3. #define __INT_MAX__ 2147483647
  4. #endif
  5. #undef INT_MIN
  6. #define INT_MIN (-INT_MAX-1)
  7. #undef INT_MAX
  8. #define INT_MAX __INT_MAX__

  9. /* Maximum value an `unsigned int' can hold.  (Minimum is 0).  */
  10. #undef UINT_MAX
  11. #define UINT_MAX (INT_MAX * 2U + 1)
复制代码



  1. /* Minimum and maximum values a `signed long long int' can hold.  */
  2. #ifndef __LONG_LONG_MAX__
  3. #define __LONG_LONG_MAX__ 9223372036854775807LL
  4. #endif

  5. #if defined (__GNU_LIBRARY__) ? defined (__USE_GNU) : !defined (__STRICT_ANSI__)
  6. #undef LONG_LONG_MIN
  7. #define LONG_LONG_MIN (-LONG_LONG_MAX-1)
  8. #undef LONG_LONG_MAX
  9. #define LONG_LONG_MAX __LONG_LONG_MAX__

  10. /* Maximum value an `unsigned long long int' can hold.  (Minimum is 0).  */
  11. #undef ULONG_LONG_MAX
  12. #define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1)
  13. #endif
复制代码


100万个最大的32位整数和根本就装不下一个long long int类型的
放心用吧:)

如果数据本身是long long类型的话,这个就要多考虑下了,建议用大数运算库,也就是直接基于字符串的那种

论坛徽章:
0
19 [报告]
发表于 2008-07-04 21:13 |只看该作者
int i;
double x;                    /*输入的数据*/
double avg = 0.0   
for( i = 1; scanf("%lf", &x) ==1 ; ++i){   
avg += (x - avg) / i;
}

论坛徽章:
0
20 [报告]
发表于 2008-07-06 06:15 |只看该作者
这个根本不用考虑溢出。100万个整数相加能溢出double型吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP