admin 发表于 2024-3-6 11:46:02

数值计算

double MathUtil::PI()
{
        return atan(1.0) * 4;//常识,求π的高精度表示
        //tan π/4=1 所以 atan( 1 ) = π/4,PI = atan(1) * 4
}
// 判断两个双精度浮点数是否相等,因为浮点数都是近似存储
bool MathUtil::IsEqual(double a, double b, double tol)
{   // 当两个浮点数的差小于10E-7,则判定两个浮点数相等
        return (fabs(a - b) < tol);
}
//一位小数四舍五入
int MathUtil::Round(double a)
{
        return(int)(a + 0.5);
}
//圆整,四舍五入
double MathUtil::Round(double a, int precision)
{
        return (floor(a*pow(10.0, precision) + 0.5) / pow(10.0, precision));
        //a乘10 的 precision 次方加0.5,用floor向下取整,最后除以10的p次方,从而将小数点移回到原来的位置
}
//生成一个在指定范围minValue和maxValue之间的随机整数
int MathUtil::GetRand(int minValue, int maxValue)
{
        assert(maxValue - minValue);
        //使用assert宏来检查maxValue和minValue之间的差异。如果maxValue小于或等于minValue,那么assert宏将抛出一个断言错误
        int value = rand();//调用标准库中的rand()函数来生成一个随机整数,并将其赋值给变量value
        int rc=minValue+(
                (int)CMathUtil::Round(((double)value)/RAND采用MAX*(maxValue - minValue)));
        /*这行代码首先将value强制转换为double类型,
        然后除以RAND采用MAX(在标准库中,这是一个表示随机数生成器可以生成的最大值的常量)。
        这样做的目的是将生成的随机数缩放到的范围内。
        然后使用CMathUtil::Round函数对这个浮点数进行四舍五入,并转换回整数。
        最后,将结果加上minValue,以将生成的随机数转换回原始的范围。*/
        return rc;//最后,这行代码返回计算出的随机整数。
}
页: [1]
查看完整版本: 数值计算