找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 135|回复: 0

数值计算

[复制链接]

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 2024-3-6 11:46:02 | 显示全部楼层 |阅读模式
  1. double MathUtil::PI()
  2. {
  3.         return atan(1.0) * 4;//常识,求π的高精度表示
  4.         //tan π/4=1 所以 atan( 1 ) = π/4,PI = atan(1) * 4
  5. }
  6. // 判断两个双精度浮点数是否相等,因为浮点数都是近似存储
  7. bool MathUtil::IsEqual(double a, double b, double tol)
  8. {   // 当两个浮点数的差小于10E-7,则判定两个浮点数相等
  9.         return (fabs(a - b) < tol);
  10. }
  11. //一位小数四舍五入
  12. int MathUtil::Round(double a)
  13. {
  14.         return(int)(a + 0.5);
  15. }
  16. //圆整,四舍五入
  17. double MathUtil::Round(double a, int precision)
  18. {
  19.         return (floor(a*pow(10.0, precision) + 0.5) / pow(10.0, precision));
  20.         //a乘10 的 precision 次方加0.5,用floor向下取整,最后除以10的p次方,从而将小数点移回到原来的位置
  21. }
  22. //生成一个在指定范围minValue和maxValue之间的随机整数
  23. int MathUtil::GetRand(int minValue, int maxValue)
  24. {
  25.         assert(maxValue - minValue);
  26.         //使用assert宏来检查maxValue和minValue之间的差异。如果maxValue小于或等于minValue,那么assert宏将抛出一个断言错误
  27.         int value = rand();//调用标准库中的rand()函数来生成一个随机整数,并将其赋值给变量value
  28.         int rc=minValue+(
  29.                 (int)CMathUtil::Round(((double)value)/RAND采用MAX*(maxValue - minValue)));
  30.         /*这行代码首先将value强制转换为double类型,
  31.         然后除以RAND采用MAX(在标准库中,这是一个表示随机数生成器可以生成的最大值的常量)。
  32.         这样做的目的是将生成的随机数缩放到[0, maxValue - minValue]的范围内。
  33.         然后使用CMathUtil::Round函数对这个浮点数进行四舍五入,并转换回整数。
  34.         最后,将结果加上minValue,以将生成的随机数转换回原始的范围[minValue, maxValue]。*/
  35.         return rc;//最后,这行代码返回计算出的随机整数。
  36. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-28 15:04 , Processed in 0.148593 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表