我采取了一些C ++代码,我想尽可能地确保便携。 我想,以避免需要root权限才能安装库的依赖关系。 此外,我更愿意避免饲养的大型图书馆拷贝在我的仓库,我也宁愿不要做图书馆的用户级安装(只是因为我必须在多台计算机手动安装它们。)
我想用normal_distribution
在我的项目与Boost功能。 据我所知,安装升压的典型方式需要sudo apt-get
或sudo yum
命令的类型,但我没有对这个地方的代码将运行系统的root访问权限。 为了解决这个问题,我想知道如果我可以简单地把Boost的副本normal_distribution.cpp和normal_distribution.hpp在我的代码目录和编译/使用这些文件链接,我的代码。 将这项工作?
读者可能想知道为什么我不只是使用normal_distribution
在TR1或实现C ++ 11。 答案是,我需要保持与一些大学的管理集群仍运行G ++ 4.1.x的,这(在我的经验,至少)不支持兼容性<TR1/random>
。
我想, BCP(升压复制)的设计充分考虑你的情况正是写的。
你应该看看ryppl项目,因为这正是它希望达到。 如果按照链接到GitHub上,你会发现模块化的提升,并从那里你可以去上,并尝试全ryppl安装。 在任何情况下,有一个半路上的房子,这就是模块化的提升 。 还有一个模块化的升压/ cmake的,使其更简单。 这是方向ryppl正在采取提升,它应该是非常有帮助的。 我能看到的唯一缺点是使用Python脚本的零安装安装程序的倾向。
如前所述BCP为这个目的而开发,以及因此是一种选择。 要知道,虽然升压正在经历一个svn-> git的变化,这似乎会影响一些结构,这反映在一些不一致的地方与当前模块化的提升,我不知道如何/如果影响BCP,因为我没有这方面的知识系统。
我遇到了一些麻烦BCP正常工作。 我记录了在这个StackOverflow的后BCP相关的问题 。
在短期内,我只是增加了一个normal_distribution
功能,我的代码库。 我把它放在一起从一对夫妇过去的StackOverflow职位。 这个实现不做任何花哨的模板的东西,但它看起来否则很类似升压,TR1,和C ++的API 11 normal_distribution
。
#include "math.h"
double normal_distribution(double mean, double stdDev)
{
//scale the number to appropriate distribution
return mean + (sampleNormal()*stdDev);
}
//get a number from normal distribution (mean=0, stdDev=1).
double sampleNormal() {
double u = ((double) rand() / (RAND_MAX)) * 2 - 1;
double v = ((double) rand() / (RAND_MAX)) * 2 - 1;
double r = u * u + v * v;
if (r == 0 || r > 1) return sampleNormal(); //recursively re-generate number if doesn't meet criteria
double c = sqrt(-2 * log(r) / r);
return u * c;
}
由于这个StackOverflow的职位 (用户Pete855217)为sampleNormal()
函数,并感谢这个StackOverflow的职位 (user5084)为我命名功能normal_distribution()