108{
109 double budget;
110 double dims_cap;
111 double rows_cap;
112 double attstat;
113 double dims;
114
115 if (ndims <= 0)
116 return 0;
117
118 if (attstattarget <= 0)
119 attstattarget = 1;
120
121
122 attstat = (double)attstattarget;
123 dims = (double)ndims;
124 budget = pow(attstat, dims);
125
126
127 dims_cap = (double)ndims * 100000.0;
128 if (budget > dims_cap)
129 budget = dims_cap;
130
131
132 if (total_rows <= 0.0)
133 return 0;
134
135 rows_cap = 10.0 * (double)ndims * total_rows;
136 if (rows_cap < 0.0)
137 rows_cap = 0.0;
138
139
140 if (rows_cap > (double)INT_MAX)
141 rows_cap = (double)INT_MAX;
142
143 if (budget > rows_cap)
144 budget = rows_cap;
145
146 if (budget >= (double)INT_MAX)
147 return INT_MAX;
148 if (budget <= 0.0)
149 return 0;
150
151 return (int)budget;
152}