生成固定位数的随机小数序列

核心代码

int divider = (int) pow(10, precision);
arr[i] = (float) (random() % divider) / divider; // (float)(rand % 100) / 1000

random() 生成 long 型的整数,% 1000 取余数,范围为 [0, 999],
然后将余数转化为 float 型,然后 / 1000,就得到了随机的三位小数。

完整代码

#include 
#include 
#include 

using namespace std;

/**
 * @param len 数列长度
 * @param precision 数据精度
 * @return 返回生成的小数数列
 */
float *generateFloatArr(int len, int precision) {

    auto *arr = new float[len]; // 自动识别类型

    // 生成随机数
    srand((unsigned int) time(nullptr));
    int divider = (int) pow(10, precision);

    for (int i = 0; i < len; ++i) {
        arr[i] = (float) (random() % divider) / divider; // (float)(rand % 100) / 1000
    }

    return arr;
}

/**
 * @param arr 小数数列
 * @param len 数列长度
 * @param w 输出单个小数的长度
 * @param precision 小数的精度
 */
void printFloatArr(float *arr, int len, int w, int precision) {
    cout << "精度为:" << precision;
    for (int i = 0; i < len; ++i) {
        cout << setw(w) << setiosflags(ios::fixed) << setprecision(precision) << arr[i];
    }
    cout << endl;
}


int main() {
    int len = 10;
    int w = 10; // 数据宽度

    // 输出多精度数
    for (int precision = 1; precision < 7; ++precision) {
        float *arr = generateFloatArr(len, precision);
        printFloatArr(arr, len, w, precision);
    }
}
精度为:1       0.3       0.6       0.7       0.5       0.3       0.5       0.6       0.2       0.9       0.1
精度为:2      0.62      0.27      0.90      0.59      0.63      0.26      0.40      0.26      0.72      0.36
精度为:3     0.211     0.368     0.567     0.429     0.782     0.530     0.862     0.123     0.067     0.135
精度为:4    0.3929    0.9802    0.4022    0.3058    0.3069    0.8167    0.1393    0.8456    0.5011    0.8042
精度为:5   0.76229   0.77373   0.84421   0.44919   0.13784   0.98537   0.75198   0.94324   0.98315   0.64370
精度为:6  0.566413  0.803526  0.776091  0.268980  0.759956  0.241873  0.806862  0.999170  0.906996  0.497281

你可能感兴趣的:(生成固定位数的随机小数序列)