给定M,B,N,我希望函数返回S =(M / B / K)^(1 / N)
M:memoryInByte(float)
B:byteForOne(int)
N:dimension(int)
K:数组的数量(int)
S:数组每个维度的大小(long long)
//Input data is..
float memories[] = {1e6f, 1e9f, 2e9f, 4e9f, 8e9f, 16e9f, 32e9f };
int dimArrays[] = {1, 2, 3};
int byteForOnes[] = {4, 8};
int numArrays[] = {1, 3, 5};
起初,我尝试使用pow(),但失败了......也许是因为...将float转换为long long ????
答案 0 :(得分:0)
long long int size_of_each_dimension_of_array( double mem, int bs, int n, int k ) {
return round(pow( mem / (bs * k), 1.0 / n ));
}
使用给定的输入值,产生:
Size (in bytes) = 4
Number of arrays = 1
Memory 1D 2D 3D
1e+06 250000 500 63
1e+09 250000000 15811 630
2e+09 500000000 22361 794
4e+09 1000000000 31623 1000
8e+09 2000000000 44721 1260
1.6e+10 4000000000 63246 1587
3.2e+10 8000000000 89443 2000
Size (in bytes) = 8
Number of arrays = 1
Memory 1D 2D 3D
1e+06 125000 354 50
1e+09 125000000 11180 500
2e+09 250000000 15811 630
4e+09 500000000 22361 794
8e+09 1000000000 31623 1000
1.6e+10 2000000000 44721 1260
3.2e+10 4000000000 63246 1587
Size (in bytes) = 4
Number of arrays = 3
Memory 1D 2D 3D
1e+06 83333 289 44
1e+09 83333333 9129 437
2e+09 166666667 12910 550
4e+09 333333333 18257 693
8e+09 666666667 25820 874
1.6e+10 1333333333 36515 1101
3.2e+10 2666666667 51640 1387
Size (in bytes) = 8
Number of arrays = 3
Memory 1D 2D 3D
1e+06 41667 204 35
1e+09 41666667 6455 347
2e+09 83333333 9129 437
4e+09 166666667 12910 550
8e+09 333333333 18257 693
1.6e+10 666666667 25820 874
3.2e+10 1333333333 36515 1101
Size (in bytes) = 4
Number of arrays = 5
Memory 1D 2D 3D
1e+06 50000 224 37
1e+09 50000000 7071 368
2e+09 100000000 10000 464
4e+09 200000000 14142 585
8e+09 400000000 20000 737
1.6e+10 800000000 28284 928
3.2e+10 1600000000 40000 1170
Size (in bytes) = 8
Number of arrays = 5
Memory 1D 2D 3D
1e+06 25000 158 29
1e+09 25000000 5000 292
2e+09 50000000 7071 368
4e+09 100000000 10000 464
8e+09 200000000 14142 585
1.6e+10 400000000 20000 737
3.2e+10 800000000 28284 928