关于Hoeffding inequality用C++计算的代码
本帖最后由 luojiafeng1984 于 2016-05-09 21:09 编辑大家好,我最近在看台大机器学习基石课程,其中有个Hoeffding不等式的公式,我想用C++代码计算一下,发现不对劲。请大家指教。
http://img1.tuicool.com/zU7fua.jpg!web
我对应写的C++代码是:// Test.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <math.h>
#include "stdlib.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
double errorRate = 0.1;
for (int i = 1; i < 10; i++)
{
int n = 1000 * i;
double fProbably = 2 * exp( -2 * (errorRate * errorRate) * n);
cout << "probably rate is:" << fProbably << " when n = " << n << endl;
}
system("pause");
return 0;
}
按照课程,n越大,得到的这种概率越小,但我的代码运行起来,结果是:
probability is:4.12231e-009 when n = 1000
probability is:8.49671e-018 when n = 2000
probability is:1.7513e-026 when n = 3000
probability is:3.6097e-035 when n = 4000
probability is:7.44015e-044 when n = 5000
probability is:1.53353e-052 when n = 6000
probability is:3.16084e-061 when n = 7000
probability is:6.51498e-070 when n = 8000
probability is:1.34284e-078 when n = 9000
请按任意键继续. . .
我想的是通过代码计算2 exp(-2 E2 N)这个值。
类似于e的符号是可接受的错误率,比如说可接受误差10%,那那个值就是 0.1
看e后面的指数不是越来越小么 回复 2# hellioncu
我还是没看明白,为什么我double类型的,输出居然是带着 e的,可否指点一下,我数学太差了。
luojiafeng1984 发表于 2016-05-09 22:35 static/image/common/back.gif
回复 2# hellioncu
我还是没看明白,为什么我double类型的,输出居然是带着 e的,可否指点一下,我数学 ...
你的值太小,科学计数法表示比较合适
页:
[1]