核心代码
int divider = (int) pow(10, precision);
arr[i] = (float) (random() % divider) / divider; // (float)(rand % 100) / 1000
random() 生成 long 型的整数,% 1000 取余数,范围为 [0, 999],
然后将余数转化为 float 型,然后 / 1000,就得到了随机的三位小数。
完整代码
#include <iostream>
#include <iomanip>
#include <math.h>
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