随笔分类 -  C++

C++生成随机数:Gamma(伽马)分布(gamma distribution)
摘要:View Code double cls_random::randomGamma( double alpha, double lambda) { double u, v; double x, y; double b, c; double w, z; bool accept = false; double t; if (alpha > 1.0) { /* Best's rejection algorithm XG for gamma random variates (B... 阅读全文
posted @ 2012-07-15 21:10 yeahgis 阅读(5072) 评论(1) 推荐(1) 编辑
C++生成随机数:X2(卡方)分布(X2 distribution)
摘要:double cls_random::randomX2(int k){ double dv = 0.0; for (int i=0;i<k;i++) { double p_dv = cls_random::randomGaussian_MarsagliaAndBray(0.0,1.0);//默认生成符合标准正态分布的随机数 dv += p_dv*p_dv; } return dv;}期望:E=k方差:V=2kwiki:http://zh.wikipedia.org/wiki/%E5%8D%A1%E6%96%B9%E5%88%86%E5%... 阅读全文
posted @ 2012-07-15 21:07 yeahgis 阅读(1936) 评论(0) 推荐(0) 编辑
C++生成随机数:几何分布(geometric distribution)
摘要:View Code long cls_random::randomGeometric( bool shifted, double probability){ long rnd = 0; while(true) { rnd++; double pV = (double)rand()/(double)RAND_MAX; if (pV<probability) { break; } } if (!shifted) { rnd--; }... 阅读全文
posted @ 2012-07-15 21:05 yeahgis 阅读(1881) 评论(0) 推荐(0) 编辑
C++生成随机数:负二项分布/帕斯卡分布(negative binomial distribution)
摘要:long cls_random::randomNegativeBinomial( double r, double probability){ long rnd = 0; double fr = 0.0; while(true) { double pV = (double)rand()/(double)RAND_MAX; if (pV<probability) { rnd++; } else { fr++; ... 阅读全文
posted @ 2012-07-15 21:01 yeahgis 阅读(3383) 评论(0) 推荐(0) 编辑
C++生成随机数:二项分布(binomial distribution)
摘要:long cls_random::randomBinomial( long N, double probability){ long rnd = 0; for (long i=0;i<N;i++) { double pV = (double)rand()/(double)RAND_MAX; if (pV<probability) { rnd++; } } return rnd;} 期望:E= 方差:V=wiki:http://zh.wikipedia.org/wiki/%E4%BA%8C%E9%A1%B9%E5%88%86%E5%B8%83 阅读全文
posted @ 2012-07-15 20:58 yeahgis 阅读(3156) 评论(0) 推荐(0) 编辑
C++生成随机数:指数分布(Exponential distribution)
摘要:double cls_random::randomExponential( double lambda){ double pV = 0.0; while(true) { pV = (double)rand()/(double)RAND_MAX; if (pV != 1) { break; } } pV = (-1.0/lambda)*log(1-pV); return pV;} 期望:E= 方差:V=wiki:http://zh.wikipedia.org/wiki/%E6%8C%87%E6%95%B0%E5%88%86%E5%B8%83 阅读全文
posted @ 2012-07-15 20:57 yeahgis 阅读(7355) 评论(1) 推荐(0) 编辑
C++生成随机数:高斯/正态分布(gaussian/normal distribution)
摘要:高斯分布也称为正态分布(normal distribution)常用的成熟的生成高斯分布随机数序列的方法由Marsaglia和Bray在1964年提出,C++版本如下:#include <stdlib.h>#include <math.h>double gaussrand(){ static double V1, V2, S; static int phase = 0; double X; if ( phase == 0 ) { do { double U1 = (double)rand() / RAND_MAX; ... 阅读全文
posted @ 2012-07-13 16:40 yeahgis 阅读(39436) 评论(3) 推荐(4) 编辑
C++生成随机数:连续均匀分布(uniform distribution)
摘要:现在要生成符合[min,max]区间内连续均匀分布(uniform distribution)的一组随机数,方法如下:#include time.h首先初始化随机数种子:srand(iSeed);//iSeed为unsigned int类型或者:srand(time(NULL));double cls_random::randomUniform( double dMinValue, double dMaxValue){ double pRandomValue = (double)(rand()/(double)RAND_MAX); pRandomValue = pRan... 阅读全文
posted @ 2012-07-13 09:06 yeahgis 阅读(9338) 评论(0) 推荐(0) 编辑
删除vector指定位置的元素
摘要:#include <vector>#include <iostream>using namespace std;int main(int argc, char** argv){ std::vector<int> vec; for(int i=0;i<100;i++) { vec.push_back(i); } printf("10:%d\n",vec[10]); printf("size:%d\n",vec.size()); printf("******************************* 阅读全文
posted @ 2012-05-29 09:40 yeahgis 阅读(62151) 评论(1) 推荐(2) 编辑
memcpy一段内存到std::vector<double>
摘要:void *pData = malloc(sizeof(double)*xsize*ysize*1/8);memset(pData,0x00,sizeof(double)*szize*ysize*1/8);.../*do something and give some values to some pixels*/...std::vector<double> resultVec(xsize*ysize);memcpy((void*)&resultVec[0],pData,sizeof(double)*xsize*ysize); 阅读全文
posted @ 2012-04-09 20:11 yeahgis 阅读(2356) 评论(0) 推荐(0) 编辑
C++中的static函数和extern关键字
摘要:仅针对声明的内部函数被外部调用或者禁止外部调用时的区别。假设:在A.cpp中声明和定义了一个函数testFoo(),则该函数是内部函数,默认情况下不可以被外部访问,如下图:在外部文件中声明testFoo为extern,如下图可以正常调用外部函数testFoo()现在将testFoo函数声明为static静态类型,则即使在外部文件中声明为extern,也无法通过编译: 阅读全文
posted @ 2012-03-30 15:13 yeahgis 阅读(313) 评论(0) 推荐(1) 编辑
栅格像元做地理坐标映射后的坐标值是像元中心点还是其他位置?
摘要:做了下实验,GDAL做完映射后像元(x,y)--->(lat,lon),得到的坐标值是像元左上角的坐标值。下面这个看到更清楚:(其实我做了一个替换,实际我求的是左上点和右下点(通过(i+1,y+1)像元求得)对应的坐标。)求出像元的Envelop,这样就能计算像元的面积(实际投影后存在边形,是梯形)了。 阅读全文
posted @ 2011-12-19 22:49 yeahgis 阅读(1475) 评论(0) 推荐(0) 编辑
C#调用使用C++\CLI封装的标准C++ DLL问题:无法访问受保护的内存,这通常指示其他内存已损坏
摘要:最近需要把使用标准C++开发的dll使用C++\CLI封装,以供C#下调用,各种工作都完成之后,却发现一个很奇怪的问题:无法访问受保护的内存,这通常指示其他内存已损坏。由于C#的程序是个web应用程序,当网站只有单个用户访问或者并发量很低时,没有任何问题,可是当网站并发量稍微一大,立马报错。由于出现问题的模块最终定位在一个依赖的第三方dll,也是使用标准C++编写,后来猜测可能是因为这个dll不支持多线程调用而导致这个问题。后来查看确实是这个问题所导致,没办法,又把C++\CLI封装的库改为控制台程序,使用C#去调用exe文件,但是目前只能通过硬盘来保存中间结果,而无法通过exe来输出二进制流 阅读全文
posted @ 2011-12-03 16:12 yeahgis 阅读(1880) 评论(2) 推荐(0) 编辑
ASP.NET与非托管DLL的那些事儿
摘要:环境VS2010 语言:ISO C++、C++\CLI和C# 多语言集成编程 最近在用ASP.NET(C#)开发一个WMS服务器的原型,由于标准C++开发的dll无法直接被C#引用,因此采用(类似SWIG自动包装的效果)C++\CLI进行二次封装和桥接(其实这也是SuperMap的套路,与ESRI的COM的确是不样)。现在遇到这样一个问题,首先做个假设:(1)最底层的库是标准C++编写,最终生成的DLL假设叫isocpp.dll,这样的dll也叫做native dll,属于unmanaged(非托管)dll。(2)为了让C#能够调用这个isocpp.dll,我使用C++\CLI对它进行... 阅读全文
posted @ 2011-11-12 11:58 yeahgis 阅读(3931) 评论(4) 推荐(3) 编辑
异常:System.BadImageFormatException,未能加载正确的程序集XXX
摘要:IDE:VS2010语言:C#异常:System.BadImageFormatException,未能加载正确的程序集XXX或其某一依赖项。。。一般是由于目标程序的目标平台与其某一依赖项的目标编译平台不一致导致,把所有的项目都修改到同一目标平台下(X86、X64或AnyCPU)进行编译,一般即可解决... 阅读全文
posted @ 2011-11-12 11:56 yeahgis 阅读(52623) 评论(5) 推荐(4) 编辑
Stack Overflow Exception
摘要:语言:标准C++IDE:vs2010 操作:递归搜索栅格图像时出现StackOverflow异常,图像大小为7397×4248共个31422456个像元。原因:程序运行时所进行的大量的递归调用所占堆栈超过了系统默认堆栈大小,引发栈溢出异常。保留堆栈和提交堆栈,指定虚拟内存中的总的堆栈分配,单位为字节,仅在生成exe文件时使用。保留堆栈:X86和X64的计算机默认保留堆栈大小为1MB,Itanium 芯片计算机为4MB;提交堆栈:对于 x86 和 x64 计算机,默认提交值为 4 KB。在 Itanium 芯片组上,默认值为 16 KB。代表一次分配的物理内存量。越大程序越快,占用内存 阅读全文
posted @ 2011-11-12 11:56 yeahgis 阅读(502) 评论(0) 推荐(0) 编辑