Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Achou.Wang
21st-Century-Examples
提交
6686f027
2
21st-Century-Examples
项目概览
Achou.Wang
/
21st-Century-Examples
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
2
21st-Century-Examples
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
6686f027
编写于
4月 11, 2014
作者:
B
Ben
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add example for debugging
上级
936a60e3
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
54 addition
and
8 deletion
+54
-8
stddev.c
stddev.c
+6
-8
stddev_bugged.c
stddev_bugged.c
+48
-0
未找到文件。
stddev.c
浏览文件 @
6686f027
/* Compile with:
export LDLIBS="`pkg-config --libs gsl`"
export CFLAGS="`pkg-config --cflags gsl` -g -Wall -std=gnu11 -O3"
make stddev
CFLAGS="-g -Wall -std=gnu11 -O3" make stddev
*/
#include <math.h>
#include <stdio.h> //size_t
...
...
@@ -12,14 +10,14 @@ meanvar mean_and_var(const double *data){
long
double
avg
=
0
,
avg2
=
0
;
long
double
ratio
;
size_t
cnt
=
0
;
size_t
c
ou
nt
=
0
;
for
(
size_t
i
=
0
;
!
isnan
(
data
[
i
]);
i
++
){
ratio
=
c
nt
/
(
c
nt
+
1
.
0
);
c
nt
++
;
ratio
=
c
ount
/
(
cou
nt
+
1
.
0
);
c
ount
++
;
avg
*=
ratio
;
avg2
*=
ratio
;
avg
+=
data
[
i
]
/
(
cnt
+
0
.
0
);
avg2
+=
pow
(
data
[
i
],
2
)
/
(
cnt
+
0
.
0
);
avg
+=
data
[
i
]
/
(
c
ou
nt
+
0
.
0
);
avg2
+=
pow
(
data
[
i
],
2
)
/
(
c
ou
nt
+
0
.
0
);
}
return
(
meanvar
){.
mean
=
avg
,
.
var
=
avg2
-
pow
(
avg
,
2
)};
//E[x^2] - E^2[x]
...
...
stddev_bugged.c
0 → 100644
浏览文件 @
6686f027
/* Compile with:
CFLAGS="-g -Wall -std=gnu11 -O3" make stddev
*/
//WARNING: This program is incorrect, intended for a debugging example.
//See stddev.c for the correct version.
#include <math.h>
#include <stdio.h> //size_t
typedef
struct
meanvar
{
double
mean
,
var
;}
meanvar
;
meanvar
mean_and_var
(
const
double
*
data
){
long
double
avg
=
0
,
avg2
=
0
;
long
double
ratio
;
size_t
count
=
0
;
for
(
size_t
i
=
0
;
!
isnan
(
data
[
i
]);
i
++
){
ratio
=
count
/
(
count
+
1
);
count
++
;
avg
*=
ratio
;
avg2
*=
ratio
;
avg
+=
data
[
i
]
/
(
count
+
0
.
0
);
avg2
+=
pow
(
data
[
i
],
2
)
/
(
count
+
0
.
0
);
}
return
(
meanvar
){.
mean
=
avg
,
.
var
=
avg2
-
pow
(
avg
,
2
)};
//E[x^2] - E^2[x]
}
int
main
(){
double
d
[]
=
{
34124
.
75
,
34124
.
48
,
34124
.
90
,
34125
.
31
,
34125
.
05
,
34124
.
98
,
NAN
};
meanvar
mv
=
mean_and_var
(
d
);
printf
(
"mean: %.10g var: %.10g
\n
"
,
mv
.
mean
,
mv
.
var
*
6
/
5
.);
double
d2
[]
=
{
4
.
75
,
4
.
48
,
4
.
90
,
5
.
31
,
5
.
05
,
4
.
98
,
NAN
};
mv
=
mean_and_var
(
d2
);
mv
.
var
*=
6
.
/
5
;
printf
(
"mean: %.10g var: %.10g
\n
"
,
mv
.
mean
,
mv
.
var
);
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录