zoukankan      html  css  js  c++  java
  • Linux Bash编程:随机数生成、对浮点数进行四舍五入运算

    本文介绍使用shell实现随机数生成以及对浮点数进行四舍五入运算。

    随机数生成

    生成0-1之间的随机数

    生成0-1的随机数:

    #!/bin/bash
    random_number=`echo "scale=4 ; ${RANDOM}/32767" | bc -l` # 生成0-1的随机数
    # random_number=`bc -l <<< "scale=4 ; ${RANDOM}/32767"`
    echo $random_number
    
    exit 0
    

    执行:

    $ sh random.sh 
    .8696
    $ sh random.sh 
    .4517
    $ sh random.sh 
    .5126
    
    • ${RANDOM}函数产生0 - 32767之间的伪随机整数。其中32767(2^15 - 1)是有符号16位整数的上限。
    • scale=4:保留4位小数

    生成0-n之间的随机数

    生成0-10之间的随机数:

    #!/bin/bash
    size=10
    max=$(( 32767 / size * size ))
    while (( (rand=$RANDOM) >= max )); do :; done
    rand=$(( rand % (size+1) )) 
    echo $rand
    

    生成1-10之间的随机数:

    #!/bin/bash
    size=10
    max=$(( 32767 / size * size ))
    while (( (rand=$RANDOM) >= max )); do :; done
    rand=$(( rand % (size) + 1 )) 
    echo $rand
    

    max=$(( 32767 / size * size ))语句比较关键,这么处理的原因是${RANDOM}产生的最大数是32767,如果生成1-10之间的随机数,需要去掉32761-32767之间的数,否则会导致出现9和10的概率和其它数不一样。

    对浮点数进行四舍五入运算

    可以使用 printf "%.*f " [精度] [浮点数] 命令对浮点数进行四舍五入运算。

    $ printf "%.*f
    " 0 6.666
    7
    $ printf "%.*f
    " 1 6.666
    6.7
    $ printf "%.*f
    " 2 6.666
    6.67
    

    bash脚本示例:

    #!/bin/bash
    
    random_number=`echo "scale=4 ; ${RANDOM}/32767" | bc -l` # 生成0-1的随机数
    number=`echo "$random_number*100" | bc`
    echo $number
    number_round1=`echo $number | xargs printf "%.*f
    " 0`
    echo $number_round1
    
    number_round2=`echo $number | xargs printf "%.*f
    " 1`
    echo $number_round2
    
    exit 0
    

    执行结果如下:

    97.8900
    98
    97.9
    
    --THE END--
  • 相关阅读:
    VMware设置共享文件夹
    非奇异阵
    ICP算法使用遇到的问题
    osgEarth编译的一些问题
    [OpenCV](1)安装与测试
    [PCL]1 PCL点云库安装
    【转载】:【C++跨平台系列】解决STL的max()与numeric_limits::max()和VC6 min/max 宏冲突问题
    matlab将多条曲线绘制在一起
    C++问题
    SLAM学习笔记(3)相关概念
  • 原文地址:https://www.cnblogs.com/hiyong/p/15203829.html
Copyright © 2011-2022 走看看