#![feature(const_fn)]
#[cfg(test)]
mod tests;
pub const fn lookup_with(z: f32, mean: f32, standard_derivation: f32) -> f32 {
lookup((z - mean) / standard_derivation)
}
pub const fn lookup(z: f32) -> f32 {
if z >= 0.0 {
lookup_index((z * 100.0) as u32)
} else {
1.0 - lookup_index((z * -100.0) as u32)
}
}
const fn lookup_index(i: u32) -> f32 {
match i {
0 => 0.5,
1 => 0.503989356314632,
2 => 0.507978313716902,
3 => 0.511966473414113,
4 => 0.515953436852831,
5 => 0.519938805838372,
6 => 0.523922182654107,
7 => 0.527903170180521,
8 => 0.531881372013987,
9 => 0.535856392585172,
10 => 0.539827837277029,
11 => 0.543795312542317,
12 => 0.547758426020584,
13 => 0.551716786654561,
14 => 0.555670004805906,
15 => 0.559617692370243,
16 => 0.563559462891433,
17 => 0.567494931675038,
18 => 0.571423715900901,
19 => 0.575345434734795,
20 => 0.579259709439103,
21 => 0.583166163482442,
22 => 0.587064422648215,
23 => 0.590954115142006,
24 => 0.594834871697796,
25 => 0.598706325682924,
26 => 0.602568113201761,
27 => 0.606419873198039,
28 => 0.610261247555797,
29 => 0.614091881198877,
30 => 0.617911422188953,
31 => 0.621719521822019,
32 => 0.62551583472332,
33 => 0.629300018940654,
34 => 0.633071736036028,
35 => 0.636830651175619,
36 => 0.640576433217991,
37 => 0.644308754800547,
38 => 0.648027292424163,
39 => 0.651731726535982,
40 => 0.655421741610324,
41 => 0.659097026227677,
42 => 0.66275727315175,
43 => 0.666402179404542,
44 => 0.670031446339406,
45 => 0.67364477971208,
46 => 0.677241889749652,
47 => 0.680822491217444,
48 => 0.684386303483777,
49 => 0.687933050582609,
50 => 0.691462461274013,
51 => 0.694974269102481,
52 => 0.698468212453034,
53 => 0.701944034605124,
54 => 0.705401483784302,
55 => 0.708840313211654,
56 => 0.712260281150973,
57 => 0.715661150953676,
58 => 0.719042691101436,
59 => 0.722404675246535,
60 => 0.725746882249926,
61 => 0.729069096216994,
62 => 0.732371106531017,
63 => 0.735652707884322,
64 => 0.738913700307138,
65 => 0.742153889194135,
66 => 0.745373085328664,
67 => 0.74857110490469,
68 => 0.75174776954643,
69 => 0.754902906325691,
70 => 0.758036347776927,
71 => 0.761147931910013,
72 => 0.764237502220749,
73 => 0.767304907699103,
74 => 0.770350002835209,
75 => 0.773372647623132,
76 => 0.776372707562401,
77 => 0.77935005365735,
78 => 0.782304562414267,
79 => 0.785236115836363,
80 => 0.788144601416603,
81 => 0.791029912128398,
82 => 0.793891946414187,
83 => 0.796730608171932,
84 => 0.79954580673955,
85 => 0.802337456877308,
86 => 0.805105478748192,
87 => 0.807849797896304,
88 => 0.810570345223288,
89 => 0.813267056962827,
90 => 0.81593987465324,
91 => 0.818588745108203,
92 => 0.821213620385628,
93 => 0.823814457754742,
94 => 0.826391219661375,
95 => 0.828943873691518,
96 => 0.831472392533162,
97 => 0.83397675393647,
98 => 0.836456940672308,
99 => 0.838912940489169,
100 => 0.841344746068543,
101 => 0.843752354978745,
102 => 0.846135769627265,
103 => 0.848494997211656,
104 => 0.850830049669019,
105 => 0.853140943624104,
106 => 0.85542770033609,
107 => 0.857690345644061,
108 => 0.859928909911231,
109 => 0.862143427967965,
110 => 0.864333939053617,
111 => 0.866500486757253,
112 => 0.868643118957269,
113 => 0.870761887759982,
114 => 0.872856849437202,
115 => 0.87492806436285,
116 => 0.876975596948657,
117 => 0.878999515578982,
118 => 0.880999892544799,
119 => 0.882976803976891,
120 => 0.884930329778292,
121 => 0.886860553556023,
122 => 0.888767562552165,
123 => 0.890651447574308,
124 => 0.892512302925413,
125 => 0.894350226333145,
126 => 0.8961653188787,
127 => 0.897957684925181,
128 => 0.899727432045558,
129 => 0.901474670950252,
130 => 0.90319951541439,
131 => 0.904902082204761,
132 => 0.906582491006528,
133 => 0.908240864349719,
134 => 0.909877327535548,
135 => 0.911492008562598,
136 => 0.913085038052915,
137 => 0.914656549178033,
138 => 0.916206677584986,
139 => 0.917735561322331,
140 => 0.919243340766229,
141 => 0.920730158546608,
142 => 0.922196159473454,
143 => 0.923641490463261,
144 => 0.925066300465673,
145 => 0.926470740390352,
146 => 0.927854963034106,
147 => 0.929219123008314,
148 => 0.930563376666668,
149 => 0.931887882033275,
150 => 0.933192798731142,
151 => 0.934478287911084,
152 => 0.935744512181064,
153 => 0.936991635536022,
154 => 0.938219823288188,
155 => 0.939429241997941,
156 => 0.940620059405207,
157 => 0.941792444361447,
158 => 0.942946566762246,
159 => 0.944082597480531,
160 => 0.945200708300442,
161 => 0.94630107185188,
162 => 0.947383861545748,
163 => 0.948449251509911,
164 => 0.949497416525896,
165 => 0.950528531966352,
166 => 0.951542773733277,
167 => 0.952540318197053,
168 => 0.95352134213628,
169 => 0.95448602267845,
170 => 0.955434537241457,
171 => 0.956367063475968,
172 => 0.957283779208671,
173 => 0.958184862386405,
174 => 0.959070491021193,
175 => 0.959940843136183,
176 => 0.960796096712517,
177 => 0.961636429637129,
178 => 0.962462019651483,
179 => 0.963273044301274,
180 => 0.964069680887074,
181 => 0.964852106415961,
182 => 0.96562049755411,
183 => 0.966375030580372,
184 => 0.967115881340836,
185 => 0.967843225204386,
186 => 0.968557237019247,
187 => 0.969258091070534,
188 => 0.9699459610388,
189 => 0.970621019959591,
190 => 0.971283440183998,
191 => 0.971933393340227,
192 => 0.972571050296163,
193 => 0.973196581122945,
194 => 0.973810155059547,
195 => 0.974411940478361,
196 => 0.97500210485178,
197 => 0.975580814719777,
198 => 0.976148235658492,
199 => 0.976704532249788,
200 => 0.977249868051821,
201 => 0.977784405570569,
202 => 0.978308306232353,
203 => 0.978821730357328,
204 => 0.97932483713393,
205 => 0.979817784594296,
206 => 0.980300729590623,
207 => 0.980773827772483,
208 => 0.981237233565062,
209 => 0.981691100148341,
210 => 0.982135579437183,
211 => 0.982570822062343,
212 => 0.982996977352367,
213 => 0.983414193316395,
214 => 0.983822616627834,
215 => 0.98422239260891,
216 => 0.984613665216075,
217 => 0.984996577026268,
218 => 0.985371269224011,
219 => 0.985737881589331,
220 => 0.986096552486501,
221 => 0.98644741885358,
222 => 0.986790616192744,
223 => 0.987126278561398,
224 => 0.987454538564053,
225 => 0.987775527344955,
226 => 0.988089374581453,
227 => 0.988396208478097,
228 => 0.988696155761447,
229 => 0.988989341675589,
230 => 0.989275889978324,
231 => 0.989555922938049,
232 => 0.98982956133128,
233 => 0.990096924440836,
234 => 0.990358130054642,
235 => 0.990613294465161,
236 => 0.990862532469427,
237 => 0.991105957369663,
238 => 0.991343680974483,
239 => 0.991575813600654,
240 => 0.991802464075404,
241 => 0.992023739739266,
242 => 0.992239746449446,
243 => 0.992450588583691,
244 => 0.992656369044652,
245 => 0.992857189264729,
246 => 0.993053149211376,
247 => 0.993244347392859,
248 => 0.993430880864453,
249 => 0.993612845235057,
250 => 0.993790334674224,
251 => 0.993963441919587,
252 => 0.994132258284667,
253 => 0.994296873667049,
254 => 0.994457376556917,
255 => 0.994613854045933,
256 => 0.994766391836444,
257 => 0.994915074251009,
258 => 0.995059984242229,
259 => 0.995201203402874,
260 => 0.995338811976281,
261 => 0.995472888867033,
262 => 0.995603511651879,
263 => 0.995730756590911,
264 => 0.995854698638964,
265 => 0.995975411457242,
266 => 0.996092967425147,
267 => 0.996207437652315,
268 => 0.996318891990825,
269 => 0.9964273990476,
270 => 0.996533026196959,
271 => 0.996635839593331,
272 => 0.996735904184109,
273 => 0.996833283722642,
274 => 0.99692804078135,
275 => 0.997020236764945,
276 => 0.997109931923774,
277 => 0.997197185367235,
278 => 0.997282055077299,
279 => 0.997364597922095,
280 => 0.997444869669572,
281 => 0.997522925001214,
282 => 0.997598817525811,
283 => 0.997672599793268,
284 => 0.997744323308458,
285 => 0.997814038545087,
286 => 0.997881794959595,
287 => 0.99794764100506,
288 => 0.998011624145106,
289 => 0.998073790867812,
290 => 0.998134186699616,
291 => 0.998192856219194,
292 => 0.998249843071324,
293 => 0.998305189980723,
294 => 0.998358938765843,
295 => 0.998411130352635,
296 => 0.998461804788262,
297 => 0.998511001254763,
298 => 0.99855875808266,
299 => 0.998605112764508,
300 => 0.99865010196837,
301 => 0.998693761551231,
302 => 0.998736126572328,
303 => 0.998777231306408,
304 => 0.998817109256896,
305 => 0.998855793168977,
306 => 0.998893315042591,
307 => 0.998929706145321,
308 => 0.998964997025197,
309 => 0.998999217523386,
310 => 0.999032396786782,
311 => 0.999064563280486,
312 => 0.999095744800178,
313 => 0.999125968484368,
314 => 0.999155260826541,
315 => 0.999183647687171,
316 => 0.999211154305624,
317 => 0.999237805311933,
318 => 0.999263624738446,
319 => 0.999288636031355,
320 => 0.999312862062084,
321 => 0.99933632513856,
322 => 0.99935904701634,
323 => 0.999381048909613,
324 => 0.999402351502066,
325 => 0.999422974957609,
326 => 0.999442938930975,
327 => 0.99946226257817,
328 => 0.999480964566793,
329 => 0.999499063086214,
330 => 0.999516575857616,
331 => 0.999533520143892,
332 => 0.999549912759408,
333 => 0.999565770079618,
334 => 0.99958110805055,
335 => 0.999595942198136,
336 => 0.999610287637418,
337 => 0.9996241590816,
338 => 0.999637570850967,
339 => 0.999650536881662,
340 => 0.999663070734323,
341 => 0.999675185602581,
342 => 0.999686894321419,
343 => 0.999698209375391,
344 => 0.999709142906709,
345 => 0.999719706723184,
346 => 0.999729912306036,
347 => 0.999739770817572,
348 => 0.99974929310872,
349 => 0.999758489726432,
350 => 0.999767370920964,
351 => 0.999775946653009,
352 => 0.999784226600705,
353 => 0.999792220166519,
354 => 0.999799936483993,
355 => 0.999807384424364,
356 => 0.999814572603067,
357 => 0.999821509386095,
358 => 0.999828202896254,
359 => 0.99983466101928,
360 => 0.999840891409842,
361 => 0.999846901497426,
362 => 0.999852698492093,
363 => 0.999858289390124,
364 => 0.999863680979554,
365 => 0.999868879845579,
366 => 0.999873892375862,
367 => 0.999878724765715,
368 => 0.999883383023185,
369 => 0.999887872974018,
370 => 0.999892200266523,
371 => 0.999896370376326,
372 => 0.999900388611024,
373 => 0.999904260114731,
374 => 0.999907989872526,
375 => 0.999911582714799,
376 => 0.999915043321502,
377 => 0.999918376226297,
378 => 0.999921585820616,
379 => 0.999924676357621,
380 => 0.999927651956075,
381 => 0.99993051660412,
382 => 0.99993327416297,
383 => 0.999935928370511,
384 => 0.999938482844817,
385 => 0.999940941087581,
386 => 0.999943306487466,
387 => 0.999945582323366,
388 => 0.999947771767598,
389 => 0.999949877889004,
390 => 0.999951903655982,
391 => 0.999953851939444,
392 => 0.999955725515688,
393 => 0.999957527069211,
394 => 0.999959259195441,
395 => 0.999960924403402,
396 => 0.999962525118309,
397 => 0.999964063684097,
398 => 0.999965542365885,
399 => 0.999966963352371,
_ => 1.0,
}
}