获取超立方体数组大小的函数

时间:2016-06-08 17:23:19

标签: c++ arrays function

this is what I want.

给定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 ????

1 个答案:

答案 0 :(得分:0)

OP没有说明他的实现失败的方式,但考虑到通常的可疑,整数除法(1 / N == 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