~ chicken-core (chicken-5) /tests/fft.scm
Trap1;;;; fft.scm - fft benchmark, by Bradley Lucier
2
3
4(cond-expand
5 ((not chicken) ; disable in CHICKEN to test specialization in safe mode
6 (declare
7 (standard-bindings)
8 (extended-bindings)
9 (block)
10 (not safe)))
11 (else
12 (import (chicken bitwise)
13 (chicken fixnum)
14 (chicken flonum)
15 (chicken process-context))))
16
17;;; All the following redefinitions are *ignored* by the Gambit compiler
18;;; because of the declarations above.
19
20(define-syntax defalias
21 (syntax-rules ()
22 ((_ one two)
23 (define-syntax one
24 (syntax-rules ()
25 ((_ . args) (two . args)))))))
26
27(cond-expand
28 (generic
29 (begin
30 (defalias fixnum->flonum exact->inexact)
31 (defalias fxodd? odd?)
32 (defalias fxeven? even?)
33 (defalias fxarithmetic-shift-right fxshr)
34 (defalias fxarithmetic-shift-left fxshl)
35 (defalias fl* *)
36 (defalias fl/ /)
37 (defalias fl+ +)
38 (defalias fl- -)))
39 (chicken
40 (begin
41 (defalias fixnum->flonum exact->inexact)
42 (defalias fxodd? odd?)
43 (defalias fxeven? even?)
44 (defalias fxarithmetic-shift-right fxshr)
45 (defalias fxarithmetic-shift-left fxshl)
46 (defalias fl* fp*)
47 (defalias fl/ fp/)
48 (defalias fl+ fp+)
49 (defalias fl- fp-)))
50 (else))
51
52(cond-expand
53 ((and chicken (not unboxed))
54 (begin
55 (defalias make-f64vector make-vector)
56 (defalias f64vector vector)
57 (defalias f64vector-set! vector-set!)
58 (defalias f64vector-ref vector-ref)
59 (defalias list->f64vector list->vector)
60 (defalias f64vector-length vector-length)) )
61 (chicken
62 (import srfi-4))
63 (else) )
64
65;;; end of *ignored* definitions
66
67(define lut-table-size 512)
68(define lut-table-size^2 262144)
69(define lut-table-size^3 134217728)
70(define log-lut-table-size 9)
71
72(define low-lut
73 (list->f64vector '(1. 0.
74 .7071067811865476 .7071067811865476
75 .9238795325112867 .3826834323650898
76 .3826834323650898 .9238795325112867
77 .9807852804032304 .19509032201612828
78 .5555702330196022 .8314696123025452
79 .8314696123025452 .5555702330196022
80 .19509032201612828 .9807852804032304
81 .9951847266721969 .0980171403295606
82 .6343932841636455 .773010453362737
83 .881921264348355 .47139673682599764
84 .2902846772544624 .9569403357322088
85 .9569403357322088 .2902846772544624
86 .47139673682599764 .881921264348355
87 .773010453362737 .6343932841636455
88 .0980171403295606 .9951847266721969
89 .9987954562051724 .049067674327418015
90 .6715589548470184 .7409511253549591
91 .9039892931234433 .4275550934302821
92 .33688985339222005 .9415440651830208
93 .970031253194544 .2429801799032639
94 .5141027441932218 .8577286100002721
95 .8032075314806449 .5956993044924334
96 .14673047445536175 .989176509964781
97 .989176509964781 .14673047445536175
98 .5956993044924334 .8032075314806449
99 .8577286100002721 .5141027441932218
100 .2429801799032639 .970031253194544
101 .9415440651830208 .33688985339222005
102 .4275550934302821 .9039892931234433
103 .7409511253549591 .6715589548470184
104 .049067674327418015 .9987954562051724
105 .9996988186962042 .024541228522912288
106 .6895405447370669 .7242470829514669
107 .9142097557035307 .40524131400498986
108 .35989503653498817 .9329927988347388
109 .9757021300385286 .2191012401568698
110 .5349976198870973 .8448535652497071
111 .8175848131515837 .5758081914178453
112 .17096188876030122 .9852776423889412
113 .99247953459871 .1224106751992162
114 .6152315905806268 .7883464276266062
115 .8700869911087115 .49289819222978404
116 .26671275747489837 .9637760657954398
117 .9495281805930367 .31368174039889146
118 .4496113296546066 .8932243011955153
119 .7572088465064846 .6531728429537768
120 .07356456359966743 .9972904566786902
121 .9972904566786902 .07356456359966743
122 .6531728429537768 .7572088465064846
123 .8932243011955153 .4496113296546066
124 .31368174039889146 .9495281805930367
125 .9637760657954398 .26671275747489837
126 .49289819222978404 .8700869911087115
127 .7883464276266062 .6152315905806268
128 .1224106751992162 .99247953459871
129 .9852776423889412 .17096188876030122
130 .5758081914178453 .8175848131515837
131 .8448535652497071 .5349976198870973
132 .2191012401568698 .9757021300385286
133 .9329927988347388 .35989503653498817
134 .40524131400498986 .9142097557035307
135 .7242470829514669 .6895405447370669
136 .024541228522912288 .9996988186962042
137 .9999247018391445 .012271538285719925
138 .6983762494089728 .7157308252838187
139 .9191138516900578 .3939920400610481
140 .37131719395183754 .9285060804732156
141 .9783173707196277 .20711137619221856
142 .5453249884220465 .8382247055548381
143 .8245893027850253 .5657318107836132
144 .18303988795514095 .9831054874312163
145 .9939069700023561 .11022220729388306
146 .6248594881423863 .7807372285720945
147 .8760700941954066 .4821837720791228
148 .2785196893850531 .9604305194155658
149 .9533060403541939 .3020059493192281
150 .46053871095824 .8876396204028539
151 .765167265622459 .6438315428897915
152 .0857973123444399 .996312612182778
153 .9981181129001492 .06132073630220858
154 .6624157775901718 .7491363945234594
155 .8986744656939538 .43861623853852766
156 .3253102921622629 .9456073253805213
157 .9669764710448521 .25486565960451457
158 .5035383837257176 .8639728561215867
159 .7958369046088836 .6055110414043255
160 .1345807085071262 .99090263542778
161 .9873014181578584 .15885814333386145
162 .5857978574564389 .8104571982525948
163 .8513551931052652 .524589682678469
164 .2310581082806711 .9729399522055602
165 .937339011912575 .34841868024943456
166 .4164295600976372 .9091679830905224
167 .7326542716724128 .680600997795453
168 .03680722294135883 .9993223845883495
169 .9993223845883495 .03680722294135883
170 .680600997795453 .7326542716724128
171 .9091679830905224 .4164295600976372
172 .34841868024943456 .937339011912575
173 .9729399522055602 .2310581082806711
174 .524589682678469 .8513551931052652
175 .8104571982525948 .5857978574564389
176 .15885814333386145 .9873014181578584
177 .99090263542778 .1345807085071262
178 .6055110414043255 .7958369046088836
179 .8639728561215867 .5035383837257176
180 .25486565960451457 .9669764710448521
181 .9456073253805213 .3253102921622629
182 .43861623853852766 .8986744656939538
183 .7491363945234594 .6624157775901718
184 .06132073630220858 .9981181129001492
185 .996312612182778 .0857973123444399
186 .6438315428897915 .765167265622459
187 .8876396204028539 .46053871095824
188 .3020059493192281 .9533060403541939
189 .9604305194155658 .2785196893850531
190 .4821837720791228 .8760700941954066
191 .7807372285720945 .6248594881423863
192 .11022220729388306 .9939069700023561
193 .9831054874312163 .18303988795514095
194 .5657318107836132 .8245893027850253
195 .8382247055548381 .5453249884220465
196 .20711137619221856 .9783173707196277
197 .9285060804732156 .37131719395183754
198 .3939920400610481 .9191138516900578
199 .7157308252838187 .6983762494089728
200 .012271538285719925 .9999247018391445
201 .9999811752826011 .006135884649154475
202 .7027547444572253 .7114321957452164
203 .9215140393420419 .3883450466988263
204 .37700741021641826 .9262102421383114
205 .9795697656854405 .2011046348420919
206 .5504579729366048 .83486287498638
207 .8280450452577558 .560661576197336
208 .18906866414980622 .9819638691095552
209 .9945645707342554 .10412163387205457
210 .629638238914927 .7768884656732324
211 .8790122264286335 .47679923006332214
212 .2844075372112718 .9587034748958716
213 .9551411683057707 .29615088824362384
214 .4659764957679662 .8847970984309378
215 .7691033376455796 .6391244448637757
216 .09190895649713272 .9957674144676598
217 .9984755805732948 .05519524434968994
218 .6669999223036375 .745057785441466
219 .901348847046022 .43309381885315196
220 .33110630575987643 .9435934581619604
221 .9685220942744173 .24892760574572018
222 .508830142543107 .8608669386377673
223 .799537269107905 .600616479383869
224 .14065823933284924 .9900582102622971
225 .9882575677307495 .15279718525844344
226 .5907597018588743 .8068475535437992
227 .8545579883654005 .5193559901655896
228 .2370236059943672 .9715038909862518
229 .9394592236021899 .3426607173119944
230 .4220002707997997 .9065957045149153
231 .7368165688773699 .6760927035753159
232 .04293825693494082 .9990777277526454
233 .9995294175010931 .030674803176636626
234 .6850836677727004 .7284643904482252
235 .9117060320054299 .41084317105790397
236 .3541635254204904 .9351835099389476
237 .9743393827855759 .22508391135979283
238 .5298036246862947 .8481203448032972
239 .8140363297059484 .5808139580957645
240 .16491312048996992 .9863080972445987
241 .9917097536690995 .12849811079379317
242 .6103828062763095 .7921065773002124
243 .8670462455156926 .49822766697278187
244 .2607941179152755 .9653944416976894
245 .9475855910177411 .3195020308160157
246 .44412214457042926 .8959662497561851
247 .7531867990436125 .6578066932970786
248 .06744391956366406 .9977230666441916
249 .9968202992911657 .07968243797143013
250 .6485144010221124 .7612023854842618
251 .8904487232447579 .45508358712634384
252 .30784964004153487 .9514350209690083
253 .9621214042690416 .272621355449949
254 .48755016014843594 .8730949784182901
255 .7845565971555752 .6200572117632892
256 .11631863091190477 .9932119492347945
257 .984210092386929 .17700422041214875
258 .5707807458869673 .8211025149911046
259 .8415549774368984 .5401714727298929
260 .21311031991609136 .9770281426577544
261 .9307669610789837 .36561299780477385
262 .39962419984564684 .9166790599210427
263 .7200025079613817 .693971460889654
264 .01840672990580482 .9998305817958234
265 .9998305817958234 .01840672990580482
266 .693971460889654 .7200025079613817
267 .9166790599210427 .39962419984564684
268 .36561299780477385 .9307669610789837
269 .9770281426577544 .21311031991609136
270 .5401714727298929 .8415549774368984
271 .8211025149911046 .5707807458869673
272 .17700422041214875 .984210092386929
273 .9932119492347945 .11631863091190477
274 .6200572117632892 .7845565971555752
275 .8730949784182901 .48755016014843594
276 .272621355449949 .9621214042690416
277 .9514350209690083 .30784964004153487
278 .45508358712634384 .8904487232447579
279 .7612023854842618 .6485144010221124
280 .07968243797143013 .9968202992911657
281 .9977230666441916 .06744391956366406
282 .6578066932970786 .7531867990436125
283 .8959662497561851 .44412214457042926
284 .3195020308160157 .9475855910177411
285 .9653944416976894 .2607941179152755
286 .49822766697278187 .8670462455156926
287 .7921065773002124 .6103828062763095
288 .12849811079379317 .9917097536690995
289 .9863080972445987 .16491312048996992
290 .5808139580957645 .8140363297059484
291 .8481203448032972 .5298036246862947
292 .22508391135979283 .9743393827855759
293 .9351835099389476 .3541635254204904
294 .41084317105790397 .9117060320054299
295 .7284643904482252 .6850836677727004
296 .030674803176636626 .9995294175010931
297 .9990777277526454 .04293825693494082
298 .6760927035753159 .7368165688773699
299 .9065957045149153 .4220002707997997
300 .3426607173119944 .9394592236021899
301 .9715038909862518 .2370236059943672
302 .5193559901655896 .8545579883654005
303 .8068475535437992 .5907597018588743
304 .15279718525844344 .9882575677307495
305 .9900582102622971 .14065823933284924
306 .600616479383869 .799537269107905
307 .8608669386377673 .508830142543107
308 .24892760574572018 .9685220942744173
309 .9435934581619604 .33110630575987643
310 .43309381885315196 .901348847046022
311 .745057785441466 .6669999223036375
312 .05519524434968994 .9984755805732948
313 .9957674144676598 .09190895649713272
314 .6391244448637757 .7691033376455796
315 .8847970984309378 .4659764957679662
316 .29615088824362384 .9551411683057707
317 .9587034748958716 .2844075372112718
318 .47679923006332214 .8790122264286335
319 .7768884656732324 .629638238914927
320 .10412163387205457 .9945645707342554
321 .9819638691095552 .18906866414980622
322 .560661576197336 .8280450452577558
323 .83486287498638 .5504579729366048
324 .2011046348420919 .9795697656854405
325 .9262102421383114 .37700741021641826
326 .3883450466988263 .9215140393420419
327 .7114321957452164 .7027547444572253
328 .006135884649154475 .9999811752826011
329 .9999952938095762 .003067956762965976
330 .7049340803759049 .7092728264388657
331 .9227011283338785 .38551605384391885
332 .37984720892405116 .9250492407826776
333 .9801821359681174 .1980984107179536
334 .5530167055800276 .8331701647019132
335 .829761233794523 .5581185312205561
336 .19208039704989244 .9813791933137546
337 .9948793307948056 .10106986275482782
338 .6320187359398091 .7749531065948739
339 .8804708890521608 .47410021465055
340 .2873474595447295 .9578264130275329
341 .9560452513499964 .29321916269425863
342 .46868882203582796 .8833633386657316
343 .7710605242618138 .6367618612362842
344 .094963495329639 .9954807554919269
345 .9986402181802653 .052131704680283324
346 .6692825883466361 .7430079521351217
347 .9026733182372588 .4303264813400826
348 .3339996514420094 .9425731976014469
349 .9692812353565485 .24595505033579462
350 .5114688504379704 .8593018183570084
351 .8013761717231402 .5981607069963423
352 .14369503315029444 .9896220174632009
353 .9887216919603238 .1497645346773215
354 .5932322950397998 .8050313311429635
355 .8561473283751945 .5167317990176499
356 .2400030224487415 .9707721407289504
357 .9405060705932683 .33977688440682685
358 .4247796812091088 .9052967593181188
359 .7388873244606151 .673829000378756
360 .04600318213091463 .9989412931868569
361 .9996188224951786 .027608145778965743
362 .6873153408917592 .726359155084346
363 .9129621904283982 .4080441628649787
364 .35703096123343003 .9340925504042589
365 .9750253450669941 .22209362097320354
366 .532403127877198 .8464909387740521
367 .8158144108067338 .5783137964116556
368 .16793829497473117 .9857975091675675
369 .9920993131421918 .12545498341154623
370 .6128100824294097 .79023022143731
371 .8685707059713409 .49556526182577254
372 .2637546789748314 .9645897932898128
373 .9485613499157303 .31659337555616585
374 .4468688401623742 .8945994856313827
375 .7552013768965365 .6554928529996153
376 .07050457338961387 .9975114561403035
377 .997060070339483 .07662386139203149
378 .6508466849963809 .7592091889783881
379 .8918407093923427 .4523495872337709
380 .3107671527496115 .9504860739494817
381 .9629532668736839 .2696683255729151
382 .49022648328829116 .8715950866559511
383 .7864552135990858 .617647307937804
384 .11936521481099137 .9928504144598651
385 .9847485018019042 .17398387338746382
386 .5732971666980422 .819347520076797
387 .8432082396418454 .5375870762956455
388 .21610679707621952 .9763697313300211
389 .9318842655816681 .3627557243673972
390 .40243465085941843 .9154487160882678
391 .7221281939292153 .6917592583641577
392 .021474080275469508 .9997694053512153
393 .9998823474542126 .015339206284988102
394 .696177131491463 .7178700450557317
395 .9179007756213905 .3968099874167103
396 .3684668299533723 .9296408958431812
397 .9776773578245099 .2101118368804696
398 .5427507848645159 .8398937941959995
399 .8228497813758263 .5682589526701316
400 .18002290140569951 .9836624192117303
401 .9935641355205953 .11327095217756435
402 .62246127937415 .7826505961665757
403 .8745866522781761 .4848692480007911
404 .27557181931095814 .9612804858113206
405 .9523750127197659 .30492922973540243
406 .45781330359887723 .8890483558546646
407 .7631884172633813 .6461760129833164
408 .08274026454937569 .9965711457905548
409 .997925286198596 .06438263092985747
410 .6601143420674205 .7511651319096864
411 .8973245807054183 .44137126873171667
412 .32240767880106985 .9466009130832835
413 .9661900034454125 .257831102162159
414 .5008853826112408 .8655136240905691
415 .7939754775543372 .6079497849677736
416 .13154002870288312 .9913108598461154
417 .9868094018141855 .16188639378011183
418 .5833086529376983 .8122505865852039
419 .8497417680008524 .5271991347819014
420 .22807208317088573 .973644249650812
421 .9362656671702783 .35129275608556715
422 .41363831223843456 .9104412922580672
423 .7305627692278276 .6828455463852481
424 .03374117185137759 .9994306045554617
425 .9992047586183639 .03987292758773981
426 .6783500431298615 .7347388780959635
427 .9078861164876663 .41921688836322396
428 .34554132496398904 .9384035340631081
429 .9722264970789363 .23404195858354343
430 .5219752929371544 .8529606049303636
431 .808656181588175 .5882815482226453
432 .15582839765426523 .9877841416445722
433 .9904850842564571 .13762012158648604
434 .6030665985403482 .7976908409433912
435 .8624239561110405 .5061866453451553
436 .25189781815421697 .9677538370934755
437 .9446048372614803 .32820984357909255
438 .4358570799222555 .9000158920161603
439 .7471006059801801 .6647109782033449
440 .05825826450043576 .9983015449338929
441 .996044700901252 .0888535525825246
442 .6414810128085832 .7671389119358204
443 .8862225301488806 .4632597835518602
444 .2990798263080405 .9542280951091057
445 .9595715130819845 .281464937925758
446 .479493757660153 .8775452902072612
447 .778816512381476 .6272518154951441
448 .10717242495680884 .9942404494531879
449 .9825393022874412 .18605515166344666
450 .5631993440138341 .8263210628456635
451 .836547727223512 .5478940591731002
452 .20410896609281687 .9789481753190622
453 .9273625256504011 .374164062971458
454 .39117038430225387 .9203182767091106
455 .7135848687807936 .7005687939432483
456 .00920375478205982 .9999576445519639
457 .9999576445519639 .00920375478205982
458 .7005687939432483 .7135848687807936
459 .9203182767091106 .39117038430225387
460 .374164062971458 .9273625256504011
461 .9789481753190622 .20410896609281687
462 .5478940591731002 .836547727223512
463 .8263210628456635 .5631993440138341
464 .18605515166344666 .9825393022874412
465 .9942404494531879 .10717242495680884
466 .6272518154951441 .778816512381476
467 .8775452902072612 .479493757660153
468 .281464937925758 .9595715130819845
469 .9542280951091057 .2990798263080405
470 .4632597835518602 .8862225301488806
471 .7671389119358204 .6414810128085832
472 .0888535525825246 .996044700901252
473 .9983015449338929 .05825826450043576
474 .6647109782033449 .7471006059801801
475 .9000158920161603 .4358570799222555
476 .32820984357909255 .9446048372614803
477 .9677538370934755 .25189781815421697
478 .5061866453451553 .8624239561110405
479 .7976908409433912 .6030665985403482
480 .13762012158648604 .9904850842564571
481 .9877841416445722 .15582839765426523
482 .5882815482226453 .808656181588175
483 .8529606049303636 .5219752929371544
484 .23404195858354343 .9722264970789363
485 .9384035340631081 .34554132496398904
486 .41921688836322396 .9078861164876663
487 .7347388780959635 .6783500431298615
488 .03987292758773981 .9992047586183639
489 .9994306045554617 .03374117185137759
490 .6828455463852481 .7305627692278276
491 .9104412922580672 .41363831223843456
492 .35129275608556715 .9362656671702783
493 .973644249650812 .22807208317088573
494 .5271991347819014 .8497417680008524
495 .8122505865852039 .5833086529376983
496 .16188639378011183 .9868094018141855
497 .9913108598461154 .13154002870288312
498 .6079497849677736 .7939754775543372
499 .8655136240905691 .5008853826112408
500 .257831102162159 .9661900034454125
501 .9466009130832835 .32240767880106985
502 .44137126873171667 .8973245807054183
503 .7511651319096864 .6601143420674205
504 .06438263092985747 .997925286198596
505 .9965711457905548 .08274026454937569
506 .6461760129833164 .7631884172633813
507 .8890483558546646 .45781330359887723
508 .30492922973540243 .9523750127197659
509 .9612804858113206 .27557181931095814
510 .4848692480007911 .8745866522781761
511 .7826505961665757 .62246127937415
512 .11327095217756435 .9935641355205953
513 .9836624192117303 .18002290140569951
514 .5682589526701316 .8228497813758263
515 .8398937941959995 .5427507848645159
516 .2101118368804696 .9776773578245099
517 .9296408958431812 .3684668299533723
518 .3968099874167103 .9179007756213905
519 .7178700450557317 .696177131491463
520 .015339206284988102 .9998823474542126
521 .9997694053512153 .021474080275469508
522 .6917592583641577 .7221281939292153
523 .9154487160882678 .40243465085941843
524 .3627557243673972 .9318842655816681
525 .9763697313300211 .21610679707621952
526 .5375870762956455 .8432082396418454
527 .819347520076797 .5732971666980422
528 .17398387338746382 .9847485018019042
529 .9928504144598651 .11936521481099137
530 .617647307937804 .7864552135990858
531 .8715950866559511 .49022648328829116
532 .2696683255729151 .9629532668736839
533 .9504860739494817 .3107671527496115
534 .4523495872337709 .8918407093923427
535 .7592091889783881 .6508466849963809
536 .07662386139203149 .997060070339483
537 .9975114561403035 .07050457338961387
538 .6554928529996153 .7552013768965365
539 .8945994856313827 .4468688401623742
540 .31659337555616585 .9485613499157303
541 .9645897932898128 .2637546789748314
542 .49556526182577254 .8685707059713409
543 .79023022143731 .6128100824294097
544 .12545498341154623 .9920993131421918
545 .9857975091675675 .16793829497473117
546 .5783137964116556 .8158144108067338
547 .8464909387740521 .532403127877198
548 .22209362097320354 .9750253450669941
549 .9340925504042589 .35703096123343003
550 .4080441628649787 .9129621904283982
551 .726359155084346 .6873153408917592
552 .027608145778965743 .9996188224951786
553 .9989412931868569 .04600318213091463
554 .673829000378756 .7388873244606151
555 .9052967593181188 .4247796812091088
556 .33977688440682685 .9405060705932683
557 .9707721407289504 .2400030224487415
558 .5167317990176499 .8561473283751945
559 .8050313311429635 .5932322950397998
560 .1497645346773215 .9887216919603238
561 .9896220174632009 .14369503315029444
562 .5981607069963423 .8013761717231402
563 .8593018183570084 .5114688504379704
564 .24595505033579462 .9692812353565485
565 .9425731976014469 .3339996514420094
566 .4303264813400826 .9026733182372588
567 .7430079521351217 .6692825883466361
568 .052131704680283324 .9986402181802653
569 .9954807554919269 .094963495329639
570 .6367618612362842 .7710605242618138
571 .8833633386657316 .46868882203582796
572 .29321916269425863 .9560452513499964
573 .9578264130275329 .2873474595447295
574 .47410021465055 .8804708890521608
575 .7749531065948739 .6320187359398091
576 .10106986275482782 .9948793307948056
577 .9813791933137546 .19208039704989244
578 .5581185312205561 .829761233794523
579 .8331701647019132 .5530167055800276
580 .1980984107179536 .9801821359681174
581 .9250492407826776 .37984720892405116
582 .38551605384391885 .9227011283338785
583 .7092728264388657 .7049340803759049
584 .003067956762965976 .9999952938095762
585 )))
586
587(define med-lut
588 (list->f64vector '(1. 0.
589 .9999999999820472 5.9921124526424275e-6
590 .9999999999281892 1.1984224905069707e-5
591 .9999999998384257 1.7976337357066685e-5
592 .9999999997127567 2.396844980841822e-5
593 .9999999995511824 2.9960562258909154e-5
594 .9999999993537025 3.5952674708324344e-5
595 .9999999991203175 4.1944787156448635e-5
596 .9999999988510269 4.793689960306688e-5
597 .9999999985458309 5.3929012047963936e-5
598 .9999999982047294 5.992112449092465e-5
599 .9999999978277226 6.591323693173387e-5
600 .9999999974148104 7.190534937017645e-5
601 .9999999969659927 7.789746180603723e-5
602 .9999999964812697 8.388957423910108e-5
603 .9999999959606412 8.988168666915283e-5
604 .9999999954041073 9.587379909597734e-5
605 .999999994811668 1.0186591151935948e-4
606 .9999999941833233 1.0785802393908407e-4
607 .9999999935190732 1.1385013635493597e-4
608 .9999999928189177 1.1984224876670004e-4
609 .9999999920828567 1.2583436117416112e-4
610 .9999999913108903 1.3182647357710405e-4
611 .9999999905030187 1.3781858597531374e-4
612 .9999999896592414 1.4381069836857496e-4
613 .9999999887795589 1.498028107566726e-4
614 .9999999878639709 1.5579492313939151e-4
615 .9999999869124775 1.6178703551651655e-4
616 .9999999859250787 1.6777914788783258e-4
617 .9999999849017744 1.737712602531244e-4
618 .9999999838425648 1.797633726121769e-4
619 .9999999827474497 1.8575548496477492e-4
620 .9999999816164293 1.9174759731070332e-4
621 .9999999804495034 1.9773970964974692e-4
622 .9999999792466722 2.037318219816906e-4
623 .9999999780079355 2.0972393430631923e-4
624 .9999999767332933 2.1571604662341763e-4
625 .9999999754227459 2.2170815893277063e-4
626 .9999999740762929 2.2770027123416315e-4
627 .9999999726939346 2.3369238352737996e-4
628 .9999999712756709 2.3968449581220595e-4
629 .9999999698215016 2.45676608088426e-4
630 .9999999683314271 2.5166872035582493e-4
631 .9999999668054471 2.5766083261418755e-4
632 .9999999652435617 2.636529448632988e-4
633 .9999999636457709 2.696450571029434e-4
634 .9999999620120748 2.756371693329064e-4
635 .9999999603424731 2.8162928155297243e-4
636 .9999999586369661 2.876213937629265e-4
637 .9999999568955537 2.936135059625534e-4
638 .9999999551182358 2.99605618151638e-4
639 .9999999533050126 3.055977303299651e-4
640 .9999999514558838 3.115898424973196e-4
641 .9999999495708498 3.1758195465348636e-4
642 .9999999476499103 3.235740667982502e-4
643 .9999999456930654 3.2956617893139595e-4
644 .9999999437003151 3.3555829105270853e-4
645 .9999999416716594 3.4155040316197275e-4
646 .9999999396070982 3.475425152589734e-4
647 .9999999375066316 3.535346273434955e-4
648 .9999999353702598 3.595267394153237e-4
649 .9999999331979824 3.6551885147424295e-4
650 .9999999309897996 3.7151096352003814e-4
651 .9999999287457114 3.7750307555249406e-4
652 .9999999264657179 3.8349518757139556e-4
653 .9999999241498189 3.8948729957652753e-4
654 .9999999217980144 3.954794115676748e-4
655 .9999999194103046 4.0147152354462224e-4
656 .9999999169866894 4.0746363550715466e-4
657 .9999999145271687 4.134557474550569e-4
658 .9999999120317428 4.194478593881139e-4
659 .9999999095004113 4.2543997130611036e-4
660 .9999999069331744 4.314320832088313e-4
661 .9999999043300322 4.3742419509606144e-4
662 .9999999016909845 4.4341630696758576e-4
663 .9999998990160315 4.4940841882318896e-4
664 .9999998963051729 4.55400530662656e-4
665 .999999893558409 4.613926424857717e-4
666 .9999998907757398 4.673847542923209e-4
667 .9999998879571651 4.7337686608208844e-4
668 .9999998851026849 4.793689778548592e-4
669 .9999998822122994 4.8536108961041806e-4
670 .9999998792860085 4.913532013485497e-4
671 .9999998763238122 4.973453130690393e-4
672 .9999998733257104 5.033374247716714e-4
673 .9999998702917032 5.09329536456231e-4
674 .9999998672217907 5.153216481225028e-4
675 .9999998641159727 5.213137597702719e-4
676 .9999998609742493 5.27305871399323e-4
677 .9999998577966206 5.332979830094408e-4
678 .9999998545830864 5.392900946004105e-4
679 .9999998513336468 5.452822061720168e-4
680 .9999998480483018 5.512743177240444e-4
681 .9999998447270514 5.572664292562783e-4
682 .9999998413698955 5.632585407685033e-4
683 .9999998379768343 5.692506522605043e-4
684 .9999998345478677 5.752427637320661e-4
685 .9999998310829956 5.812348751829735e-4
686 .9999998275822183 5.872269866130116e-4
687 .9999998240455354 5.93219098021965e-4
688 .9999998204729471 5.992112094096185e-4
689 .9999998168644535 6.052033207757572e-4
690 .9999998132200545 6.111954321201659e-4
691 .99999980953975 6.171875434426292e-4
692 .9999998058235401 6.231796547429323e-4
693 .9999998020714248 6.291717660208597e-4
694 .9999997982834041 6.351638772761965e-4
695 .9999997944594781 6.411559885087275e-4
696 .9999997905996466 6.471480997182375e-4
697 .9999997867039097 6.531402109045114e-4
698 .9999997827722674 6.591323220673341e-4
699 .9999997788047197 6.651244332064902e-4
700 .9999997748012666 6.711165443217649e-4
701 .9999997707619082 6.771086554129428e-4
702 .9999997666866443 6.83100766479809e-4
703 .9999997625754748 6.89092877522148e-4
704 .9999997584284002 6.950849885397449e-4
705 .9999997542454201 7.010770995323844e-4
706 .9999997500265345 7.070692104998515e-4
707 .9999997457717437 7.130613214419311e-4
708 .9999997414810473 7.190534323584079e-4
709 .9999997371544456 7.250455432490666e-4
710 .9999997327919384 7.310376541136925e-4
711 .9999997283935259 7.3702976495207e-4
712 .999999723959208 7.430218757639842e-4
713 .9999997194889846 7.490139865492199e-4
714 .9999997149828559 7.55006097307562e-4
715 .9999997104408218 7.609982080387952e-4
716 .9999997058628822 7.669903187427045e-4
717 .9999997012490373 7.729824294190747e-4
718 .9999996965992869 7.789745400676906e-4
719 .9999996919136313 7.849666506883372e-4
720 .99999968719207 7.909587612807992e-4
721 .9999996824346035 7.969508718448614e-4
722 .9999996776412315 8.029429823803089e-4
723 .9999996728119542 8.089350928869263e-4
724 .9999996679467715 8.149272033644986e-4
725 .9999996630456833 8.209193138128106e-4
726 .9999996581086897 8.269114242316472e-4
727 .9999996531357909 8.329035346207931e-4
728 .9999996481269865 8.388956449800333e-4
729 .9999996430822767 8.448877553091527e-4
730 .9999996380016616 8.508798656079359e-4
731 .999999632885141 8.56871975876168e-4
732 .9999996277327151 8.628640861136338e-4
733 .9999996225443838 8.68856196320118e-4
734 .9999996173201471 8.748483064954056e-4
735 .999999612060005 8.808404166392814e-4
736 .9999996067639574 8.868325267515304e-4
737 .9999996014320045 8.928246368319371e-4
738 .9999995960641462 8.988167468802867e-4
739 .9999995906603825 9.048088568963639e-4
740 .9999995852207133 9.108009668799535e-4
741 .9999995797451389 9.167930768308405e-4
742 .9999995742336589 9.227851867488095e-4
743 .9999995686862736 9.287772966336457e-4
744 .9999995631029829 9.347694064851338e-4
745 .9999995574837868 9.407615163030585e-4
746 .9999995518286853 9.467536260872047e-4
747 .9999995461376784 9.527457358373575e-4
748 .9999995404107661 9.587378455533015e-4
749 .9999995346479484 9.647299552348216e-4
750 .9999995288492254 9.707220648817027e-4
751 .9999995230145969 9.767141744937296e-4
752 .9999995171440631 9.827062840706872e-4
753 .9999995112376238 9.886983936123602e-4
754 .9999995052952791 9.946905031185337e-4
755 .9999994993170291 .0010006826125889925
756 .9999994933028736 .0010066747220235214
757 .9999994872528128 .001012666831421905
758 .9999994811668466 .0010186589407839286
759 .999999475044975 .0010246510501093766
760 .9999994688871979 .0010306431593980344
761 .9999994626935156 .0010366352686496862
762 .9999994564639277 .0010426273778641173
763 .9999994501984345 .0010486194870411127
764 .999999443897036 .0010546115961804568
765 .999999437559732 .0010606037052819344
766 .9999994311865227 .0010665958143453308
767 .9999994247774079 .0010725879233704307
768 .9999994183323877 .0010785800323570187
769 .9999994118514622 .0010845721413048801
770 .9999994053346313 .0010905642502137994
771 .9999993987818949 .0010965563590835613
772 .9999993921932533 .0011025484679139511
773 .9999993855687062 .0011085405767047535
774 .9999993789082536 .0011145326854557532
775 .9999993722118957 .001120524794166735
776 .9999993654796325 .0011265169028374842
777 .9999993587114638 .0011325090114677853
778 .9999993519073898 .001138501120057423
779 .9999993450674104 .0011444932286061825
780 .9999993381915255 .0011504853371138485
781 .9999993312797354 .0011564774455802057
782 .9999993243320398 .0011624695540050393
783 .9999993173484387 .001168461662388134
784 .9999993103289324 .0011744537707292742
785 .9999993032735206 .0011804458790282454
786 .9999992961822035 .0011864379872848323
787 .9999992890549809 .0011924300954988195
788 .999999281891853 .001198422203669992
789 .9999992746928197 .0012044143117981348
790 .999999267457881 .0012104064198830327
791 .999999260187037 .0012163985279244702
792 .9999992528802875 .0012223906359222325
793 .9999992455376326 .0012283827438761045
794 .9999992381590724 .0012343748517858707
795 .9999992307446068 .0012403669596513162
796 .9999992232942359 .001246359067472226
797 .9999992158079595 .0012523511752483847
798 .9999992082857777 .001258343282979577
799 .9999992007276906 .001264335390665588
800 .999999193133698 .0012703274983062026
801 .9999991855038001 .0012763196059012057
802 .9999991778379967 .001282311713450382
803 .9999991701362881 .0012883038209535163
804 .999999162398674 .0012942959284103935
805 .9999991546251547 .0013002880358207985
806 .9999991468157298 .001306280143184516
807 .9999991389703996 .001312272250501331
808 .999999131089164 .0013182643577710285
809 .999999123172023 .0013242564649933932
810 .9999991152189767 .0013302485721682098
811 .9999991072300249 .001336240679295263
812 .9999990992051678 .0013422327863743383
813 .9999990911444054 .0013482248934052201
814 .9999990830477375 .0013542170003876934
815 .9999990749151643 .001360209107321543
816 .9999990667466857 .0013662012142065536
817 .9999990585423016 .0013721933210425101
818 .9999990503020123 .0013781854278291975
819 .9999990420258176 .0013841775345664006
820 .9999990337137175 .0013901696412539043
821 .999999025365712 .0013961617478914935
822 .999999016981801 .0014021538544789526
823 .9999990085619848 .001408145961016067
824 .9999990001062631 .0014141380675026214
825 .9999989916146361 .0014201301739384005
826 .9999989830871038 .0014261222803231893
827 .9999989745236659 .0014321143866567725
828 .9999989659243228 .001438106492938935
829 .9999989572890743 .0014440985991694619
830 .9999989486179204 .0014500907053481378
831 .9999989399108612 .0014560828114747475
832 .9999989311678965 .0014620749175490758
833 .9999989223890265 .001468067023570908
834 .9999989135742512 .0014740591295400284
835 .9999989047235704 .0014800512354562223
836 .9999988958369843 .0014860433413192743
837 .9999988869144928 .0014920354471289693
838 .9999988779560959 .0014980275528850922
839 .9999988689617937 .0015040196585874275
840 .9999988599315861 .0015100117642357607
841 .999998850865473 .0015160038698298762
842 .9999988417634548 .001521995975369559
843 .999998832625531 .0015279880808545937
844 .9999988234517019 .0015339801862847657
845 .9999988142419675 .0015399722916598592
846 .9999988049963277 .0015459643969796596
847 .9999987957147825 .0015519565022439512
848 .9999987863973319 .0015579486074525195
849 .9999987770439759 .001563940712605149
850 .9999987676547146 .0015699328177016243
851 .999998758229548 .0015759249227417307
852 .9999987487684759 .0015819170277252528
853 .9999987392714985 .0015879091326519755
854 .9999987297386157 .0015939012375216837
855 .9999987201698276 .0015998933423341623
856 .9999987105651341 .001605885447089196
857 .9999987009245352 .0016118775517865696
858 .999998691248031 .0016178696564260683
859 .9999986815356214 .0016238617610074765
860 .9999986717873064 .0016298538655305794
861 .9999986620030861 .0016358459699951618
862 .9999986521829605 .0016418380744010084
863 .9999986423269294 .0016478301787479041
864 .999998632434993 .0016538222830356339
865 .9999986225071512 .0016598143872639823
866 .999998612543404 .0016658064914327345
867 .9999986025437515 .0016717985955416754
868 .9999985925081937 .0016777906995905894
869 .9999985824367305 .0016837828035792617
870 .9999985723293618 .0016897749075074774
871 .999998562186088 .0016957670113750207
872 .9999985520069086 .0017017591151816769
873 .9999985417918239 .0017077512189272307
874 .999998531540834 .001713743322611467
875 .9999985212539385 .0017197354262341706
876 .9999985109311378 .0017257275297951264
877 .9999985005724317 .0017317196332941192
878 .9999984901778203 .0017377117367309341
879 .9999984797473034 .0017437038401053556
880 .9999984692808812 .0017496959434171687
881 .9999984587785538 .0017556880466661582
882 .9999984482403208 .001761680149852109
883 .9999984376661826 .0017676722529748061
884 .999998427056139 .0017736643560340342
885 .99999841641019 .001779656459029578
886 .9999984057283358 .0017856485619612225
887 .9999983950105761 .0017916406648287528
888 .999998384256911 .0017976327676319532
889 .9999983734673407 .001803624870370609
890 .9999983626418649 .0018096169730445048
891 .9999983517804839 .0018156090756534257
892 .9999983408831975 .0018216011781971562
893 .9999983299500057 .0018275932806754815
894 .9999983189809085 .0018335853830881864
895 .999998307975906 .0018395774854350557
896 .9999982969349982 .001845569587715874
897 .9999982858581851 .0018515616899304264
898 .9999982747454665 .001857553792078498
899 .9999982635968426 .001863545894159873
900 .9999982524123134 .0018695379961743367
901 .9999982411918789 .001875530098121674
902 .9999982299355389 .0018815222000016696
903 .9999982186432936 .0018875143018141083
904 .999998207315143 .0018935064035587748
905 .999998195951087 .0018994985052354545
906 .9999981845511257 .0019054906068439318
907 .9999981731152591 .0019114827083839918
908 .999998161643487 .001917474809855419
909 .9999981501358096 .0019234669112579987
910 .999998138592227 .0019294590125915154
911 .9999981270127389 .0019354511138557542
912 .9999981153973455 .0019414432150504997
913 .9999981037460468 .0019474353161755369
914 .9999980920588427 .001953427417230651
915 .9999980803357332 .001959419518215626
916 .9999980685767185 .0019654116191302473
917 .9999980567817984 .0019714037199743
918 .9999980449509729 .0019773958207475683
919 .9999980330842422 .0019833879214498375
920 .999998021181606 .001989380022080892
921 .9999980092430646 .0019953721226405176
922 .9999979972686177 .002001364223128498
923 .9999979852582656 .002007356323544619
924 .9999979732120081 .002013348423888665
925 .9999979611298453 .002019340524160421
926 .9999979490117771 .0020253326243596715
927 .9999979368578036 .0020313247244862017
928 .9999979246679247 .002037316824539796
929 .9999979124421405 .00204330892452024
930 .999997900180451 .002049301024427318
931 .9999978878828562 .0020552931242608153
932 .9999978755493559 .002061285224020516
933 .9999978631799504 .0020672773237062057
934 .9999978507746395 .002073269423317669
935 .9999978383334234 .0020792615228546903
936 .9999978258563018 .002085253622317055
937 .999997813343275 .0020912457217045484
938 .9999978007943428 .002097237821016954
939 .9999977882095052 .0021032299202540577
940 .9999977755887623 .0021092220194156444
941 .9999977629321142 .0021152141185014984
942 .9999977502395607 .0021212062175114043
943 .9999977375111019 .002127198316445148
944 .9999977247467376 .0021331904153025134
945 .9999977119464681 .002139182514083286
946 .9999976991102932 .0021451746127872503
947 .9999976862382131 .002151166711414191
948 .9999976733302276 .0021571588099638934
949 .9999976603863368 .0021631509084361423
950 .9999976474065406 .002169143006830722
951 .9999976343908391 .002175135105147418
952 .9999976213392323 .0021811272033860148
953 .9999976082517201 .002187119301546297
954 .9999975951283027 .00219311139962805
955 .9999975819689799 .0021991034976310588
956 .9999975687737518 .0022050955955551076
957 .9999975555426184 .0022110876933999816
958 .9999975422755796 .0022170797911654654
959 .9999975289726355 .002223071888851344
960 .9999975156337861 .0022290639864574026
961 .9999975022590314 .0022350560839834253
962 .9999974888483714 .002241048181429198
963 .999997475401806 .0022470402787945045
964 .9999974619193353 .00225303237607913
965 .9999974484009593 .0022590244732828596
966 .9999974348466779 .0022650165704054784
967 .9999974212564913 .0022710086674467703
968 .9999974076303992 .002277000764406521
969 .9999973939684019 .002282992861284515
970 .9999973802704993 .0022889849580805368
971 .9999973665366915 .0022949770547943723
972 .9999973527669782 .0023009691514258054
973 .9999973389613596 .002306961247974621
974 .9999973251198357 .0023129533444406045
975 .9999973112424065 .0023189454408235406
976 .999997297329072 .0023249375371232135
977 .9999972833798322 .002330929633339409
978 .999997269394687 .0023369217294719113
979 .9999972553736366 .0023429138255205055
980 .9999972413166809 .0023489059214849765
981 .9999972272238198 .002354898017365109
982 .9999972130950534 .0023608901131606883
983 .9999971989303816 .0023668822088714985
984 .9999971847298047 .0023728743044973246
985 .9999971704933224 .0023788664000379523
986 .9999971562209347 .0023848584954931653
987 .9999971419126418 .0023908505908627493
988 .9999971275684435 .0023968426861464883
989 .99999711318834 .002402834781344168
990 .9999970987723311 .0024088268764555732
991 .9999970843204169 .002414818971480488
992 .9999970698325974 .002420811066418698
993 .9999970553088726 .0024268031612699878
994 .9999970407492426 .002432795256034142
995 .9999970261537071 .002438787350710946
996 .9999970115222664 .002444779445300184
997 .9999969968549204 .0024507715398016418
998 .9999969821516691 .002456763634215103
999 .9999969674125124 .002462755728540353
1000 .9999969526374506 .0024687478227771774
1001 .9999969378264834 .00247473991692536
1002 .9999969229796108 .002480732010984686
1003 .999996908096833 .0024867241049549406
1004 .9999968931781499 .002492716198835908
1005 .9999968782235614 .0024987082926273734
1006 .9999968632330677 .002504700386329122
1007 .9999968482066687 .002510692479940938
1008 .9999968331443644 .0025166845734626068
1009 .9999968180461547 .0025226766668939127
1010 .9999968029120399 .002528668760234641
1011 .9999967877420196 .002534660853484576
1012 .9999967725360941 .0025406529466435036
1013 .9999967572942633 .002546645039711208
1014 .9999967420165272 .002552637132687474
1015 .9999967267028858 .002558629225572086
1016 .9999967113533391 .0025646213183648297
1017 .9999966959678871 .0025706134110654896
1018 .9999966805465298 .002576605503673851
1019 .9999966650892672 .0025825975961896977
1020 .9999966495960994 .0025885896886128153
1021 .9999966340670262 .0025945817809429885
1022 .9999966185020478 .0026005738731800024
1023 .9999966029011641 .0026065659653236417
1024 .999996587264375 .002612558057373691
1025 .9999965715916808 .002618550149329935
1026 .9999965558830811 .0026245422411921592
1027 .9999965401385762 .002630534332960148
1028 .9999965243581661 .002636526424633687
1029 .9999965085418506 .0026425185162125596
1030 .9999964926896299 .0026485106076965517
1031 .9999964768015038 .0026545026990854484
1032 .9999964608774725 .0026604947903790337
1033 .9999964449175359 .0026664868815770926
1034 .999996428921694 .0026724789726794104
1035 .9999964128899468 .002678471063685772
1036 .9999963968222944 .0026844631545959617
1037 .9999963807187366 .002690455245409765
1038 .9999963645792737 .002696447336126966
1039 .9999963484039053 .00270243942674735
1040 .9999963321926317 .002708431517270702
1041 .9999963159454529 .0027144236076968066
1042 .9999962996623687 .0027204156980254485
1043 .9999962833433793 .002726407788256413
1044 .9999962669884847 .002732399878389485
1045 .9999962505976846 .0027383919684244484
1046 .9999962341709794 .002744384058361089
1047 .9999962177083689 .0027503761481991913
1048 .999996201209853 .0027563682379385403
1049 .9999961846754319 .0027623603275789207
1050 .9999961681051056 .0027683524171201175
1051 .999996151498874 .002774344506561915
1052 .9999961348567371 .002780336595904099
1053 .9999961181786949 .0027863286851464537
1054 .9999961014647475 .0027923207742887642
1055 .9999960847148948 .0027983128633308155
1056 .9999960679291368 .002804304952272392
1057 .9999960511074735 .002810297041113279
1058 .9999960342499049 .0028162891298532606
1059 .9999960173564312 .0028222812184921227
1060 .9999960004270521 .002828273307029649
1061 .9999959834617678 .002834265395465626
1062 .9999959664605781 .0028402574837998367
1063 .9999959494234832 .002846249572032067
1064 .9999959323504831 .0028522416601621014
1065 .9999959152415777 .002858233748189725
1066 .999995898096767 .002864225836114723
1067 .9999958809160512 .0028702179239368793
1068 .9999958636994299 .0028762100116559793
1069 .9999958464469034 .0028822020992718077
1070 .9999958291584717 .0028881941867841495
1071 .9999958118341348 .0028941862741927895
1072 .9999957944738925 .0029001783614975127
1073 .999995777077745 .002906170448698104
1074 .9999957596456922 .0029121625357943475
1075 .9999957421777342 .002918154622786029
1076 .999995724673871 .0029241467096729327
1077 .9999957071341024 .002930138796454844
1078 .9999956895584287 .0029361308831315474
1079 .9999956719468496 .0029421229697028273
1080 .9999956542993652 .0029481150561684695
1081 .9999956366159757 .0029541071425282584
1082 .9999956188966809 .002960099228781979
1083 .9999956011414808 .002966091314929416
1084 .9999955833503754 .002972083400970354
1085 .9999955655233649 .0029780754869045785
1086 .9999955476604491 .0029840675727318736
1087 .999995529761628 .002990059658452025
1088 .9999955118269016 .0029960517440648163
1089 .99999549385627 .0030020438295700336
1090 .9999954758497331 .0030080359149674612
1091 .999995457807291 .003014028000256884
1092 .9999954397289438 .003020020085438087
1093 .9999954216146911 .0030260121705108552
1094 .9999954034645333 .003032004255474973
1095 .9999953852784702 .003037996340330225
1096 .9999953670565019 .003043988425076397
1097 .9999953487986284 .003049980509713273
1098 .9999953305048496 .0030559725942406386
1099 .9999953121751655 .003061964678658278
1100 )))
1101
1102
1103(define high-lut
1104 (list->f64vector '(1. 0.
1105 .9999999999999999 1.1703344634137277e-8
1106 .9999999999999998 2.3406689268274554e-8
1107 .9999999999999993 3.5110033902411824e-8
1108 .9999999999999989 4.6813378536549095e-8
1109 .9999999999999983 5.851672317068635e-8
1110 .9999999999999976 7.022006780482361e-8
1111 .9999999999999967 8.192341243896085e-8
1112 .9999999999999957 9.362675707309808e-8
1113 .9999999999999944 1.0533010170723531e-7
1114 .9999999999999931 1.170334463413725e-7
1115 .9999999999999917 1.287367909755097e-7
1116 .9999999999999901 1.4044013560964687e-7
1117 .9999999999999885 1.5214348024378403e-7
1118 .9999999999999866 1.6384682487792116e-7
1119 .9999999999999846 1.7555016951205827e-7
1120 .9999999999999825 1.8725351414619535e-7
1121 .9999999999999802 1.989568587803324e-7
1122 .9999999999999778 2.1066020341446942e-7
1123 .9999999999999752 2.2236354804860645e-7
1124 .9999999999999726 2.3406689268274342e-7
1125 .9999999999999698 2.4577023731688034e-7
1126 .9999999999999668 2.5747358195101726e-7
1127 .9999999999999638 2.6917692658515413e-7
1128 .9999999999999606 2.8088027121929094e-7
1129 .9999999999999571 2.9258361585342776e-7
1130 .9999999999999537 3.042869604875645e-7
1131 .99999999999995 3.159903051217012e-7
1132 .9999999999999463 3.276936497558379e-7
1133 .9999999999999424 3.3939699438997453e-7
1134 .9999999999999384 3.5110033902411114e-7
1135 .9999999999999342 3.6280368365824763e-7
1136 .9999999999999298 3.7450702829238413e-7
1137 .9999999999999254 3.8621037292652057e-7
1138 .9999999999999208 3.979137175606569e-7
1139 .9999999999999161 4.0961706219479325e-7
1140 .9999999999999113 4.2132040682892953e-7
1141 .9999999999999063 4.330237514630657e-7
1142 .9999999999999011 4.447270960972019e-7
1143 .9999999999998959 4.5643044073133796e-7
1144 .9999999999998904 4.68133785365474e-7
1145 .9999999999998849 4.7983712999961e-7
1146 .9999999999998792 4.915404746337459e-7
1147 .9999999999998733 5.032438192678817e-7
1148 .9999999999998674 5.149471639020175e-7
1149 .9999999999998613 5.266505085361531e-7
1150 .9999999999998551 5.383538531702888e-7
1151 .9999999999998487 5.500571978044243e-7
1152 .9999999999998422 5.617605424385598e-7
1153 .9999999999998356 5.734638870726952e-7
1154 .9999999999998288 5.851672317068305e-7
1155 .9999999999998219 5.968705763409657e-7
1156 .9999999999998148 6.085739209751009e-7
1157 .9999999999998076 6.202772656092359e-7
1158 .9999999999998003 6.319806102433709e-7
1159 .9999999999997928 6.436839548775058e-7
1160 .9999999999997853 6.553872995116406e-7
1161 .9999999999997775 6.670906441457753e-7
1162 .9999999999997696 6.7879398877991e-7
1163 .9999999999997616 6.904973334140445e-7
1164 .9999999999997534 7.02200678048179e-7
1165 .9999999999997452 7.139040226823132e-7
1166 .9999999999997368 7.256073673164475e-7
1167 .9999999999997282 7.373107119505817e-7
1168 .9999999999997194 7.490140565847157e-7
1169 .9999999999997107 7.607174012188497e-7
1170 .9999999999997017 7.724207458529835e-7
1171 .9999999999996926 7.841240904871172e-7
1172 .9999999999996834 7.958274351212508e-7
1173 .9999999999996739 8.075307797553844e-7
1174 .9999999999996644 8.192341243895178e-7
1175 .9999999999996547 8.309374690236511e-7
1176 .999999999999645 8.426408136577842e-7
1177 .9999999999996351 8.543441582919173e-7
1178 .999999999999625 8.660475029260503e-7
1179 .9999999999996148 8.777508475601831e-7
1180 .9999999999996044 8.894541921943158e-7
1181 .999999999999594 9.011575368284484e-7
1182 .9999999999995833 9.128608814625808e-7
1183 .9999999999995726 9.245642260967132e-7
1184 .9999999999995617 9.362675707308454e-7
1185 .9999999999995507 9.479709153649775e-7
1186 .9999999999995395 9.596742599991095e-7
1187 .9999999999995283 9.713776046332412e-7
1188 .9999999999995168 9.83080949267373e-7
1189 .9999999999995052 9.947842939015044e-7
1190 .9999999999994935 1.006487638535636e-6
1191 .9999999999994816 1.0181909831697673e-6
1192 .9999999999994696 1.0298943278038984e-6
1193 .9999999999994575 1.0415976724380293e-6
1194 .9999999999994453 1.0533010170721601e-6
1195 .9999999999994329 1.065004361706291e-6
1196 .9999999999994204 1.0767077063404215e-6
1197 .9999999999994077 1.088411050974552e-6
1198 .9999999999993949 1.1001143956086822e-6
1199 .9999999999993819 1.1118177402428122e-6
1200 .9999999999993688 1.1235210848769423e-6
1201 .9999999999993556 1.135224429511072e-6
1202 .9999999999993423 1.1469277741452017e-6
1203 .9999999999993288 1.1586311187793313e-6
1204 .9999999999993151 1.1703344634134605e-6
1205 .9999999999993014 1.1820378080475897e-6
1206 .9999999999992875 1.1937411526817187e-6
1207 .9999999999992735 1.2054444973158477e-6
1208 .9999999999992593 1.2171478419499764e-6
1209 .9999999999992449 1.2288511865841048e-6
1210 .9999999999992305 1.2405545312182331e-6
1211 .999999999999216 1.2522578758523615e-6
1212 .9999999999992012 1.2639612204864894e-6
1213 .9999999999991863 1.2756645651206173e-6
1214 .9999999999991713 1.287367909754745e-6
1215 .9999999999991562 1.2990712543888725e-6
1216 .9999999999991409 1.3107745990229998e-6
1217 .9999999999991255 1.3224779436571269e-6
1218 .9999999999991099 1.3341812882912537e-6
1219 .9999999999990943 1.3458846329253806e-6
1220 .9999999999990785 1.3575879775595072e-6
1221 .9999999999990625 1.3692913221936337e-6
1222 .9999999999990464 1.3809946668277597e-6
1223 .9999999999990302 1.3926980114618857e-6
1224 .9999999999990138 1.4044013560960117e-6
1225 .9999999999989974 1.4161047007301373e-6
1226 .9999999999989807 1.4278080453642627e-6
1227 .9999999999989639 1.439511389998388e-6
1228 .999999999998947 1.451214734632513e-6
1229 .99999999999893 1.462918079266638e-6
1230 .9999999999989128 1.4746214239007625e-6
1231 .9999999999988954 1.486324768534887e-6
1232 .999999999998878 1.4980281131690111e-6
1233 .9999999999988604 1.5097314578031353e-6
1234 .9999999999988426 1.5214348024372591e-6
1235 .9999999999988247 1.5331381470713828e-6
1236 .9999999999988067 1.544841491705506e-6
1237 .9999999999987886 1.5565448363396294e-6
1238 .9999999999987703 1.5682481809737524e-6
1239 .9999999999987519 1.579951525607875e-6
1240 .9999999999987333 1.5916548702419977e-6
1241 .9999999999987146 1.60335821487612e-6
1242 .9999999999986958 1.615061559510242e-6
1243 .9999999999986768 1.626764904144364e-6
1244 .9999999999986577 1.6384682487784858e-6
1245 .9999999999986384 1.6501715934126072e-6
1246 .9999999999986191 1.6618749380467283e-6
1247 .9999999999985996 1.6735782826808495e-6
1248 .9999999999985799 1.6852816273149702e-6
1249 .9999999999985602 1.6969849719490907e-6
1250 .9999999999985402 1.708688316583211e-6
1251 .9999999999985201 1.720391661217331e-6
1252 .9999999999985 1.732095005851451e-6
1253 .9999999999984795 1.7437983504855706e-6
1254 .9999999999984591 1.7555016951196899e-6
1255 .9999999999984385 1.767205039753809e-6
1256 .9999999999984177 1.778908384387928e-6
1257 .9999999999983968 1.7906117290220465e-6
1258 .9999999999983759 1.802315073656165e-6
1259 .9999999999983546 1.814018418290283e-6
1260 .9999999999983333 1.825721762924401e-6
1261 .9999999999983119 1.8374251075585186e-6
1262 .9999999999982904 1.8491284521926361e-6
1263 .9999999999982686 1.8608317968267533e-6
1264 .9999999999982468 1.8725351414608702e-6
1265 .9999999999982249 1.8842384860949866e-6
1266 .9999999999982027 1.8959418307291031e-6
1267 .9999999999981805 1.9076451753632194e-6
1268 .999999999998158 1.919348519997335e-6
1269 .9999999999981355 1.9310518646314507e-6
1270 .9999999999981128 1.942755209265566e-6
1271 .9999999999980901 1.954458553899681e-6
1272 .9999999999980671 1.966161898533796e-6
1273 .999999999998044 1.9778652431679103e-6
1274 .9999999999980208 1.9895685878020246e-6
1275 .9999999999979975 2.0012719324361386e-6
1276 .999999999997974 2.012975277070252e-6
1277 .9999999999979503 2.0246786217043656e-6
1278 .9999999999979265 2.0363819663384787e-6
1279 .9999999999979027 2.048085310972592e-6
1280 .9999999999978786 2.0597886556067045e-6
1281 .9999999999978545 2.0714920002408167e-6
1282 .9999999999978302 2.0831953448749286e-6
1283 .9999999999978058 2.0948986895090404e-6
1284 .9999999999977811 2.106602034143152e-6
1285 .9999999999977564 2.118305378777263e-6
1286 .9999999999977315 2.1300087234113738e-6
1287 .9999999999977065 2.1417120680454843e-6
1288 .9999999999976814 2.153415412679595e-6
1289 .9999999999976561 2.1651187573137046e-6
1290 .9999999999976307 2.1768221019478143e-6
1291 .9999999999976051 2.188525446581924e-6
1292 .9999999999975795 2.200228791216033e-6
1293 .9999999999975536 2.2119321358501417e-6
1294 .9999999999975278 2.22363548048425e-6
1295 .9999999999975017 2.2353388251183586e-6
1296 .9999999999974754 2.247042169752466e-6
1297 .999999999997449 2.2587455143865738e-6
1298 .9999999999974225 2.2704488590206814e-6
1299 .9999999999973959 2.282152203654788e-6
1300 .9999999999973691 2.293855548288895e-6
1301 .9999999999973422 2.305558892923001e-6
1302 .9999999999973151 2.317262237557107e-6
1303 .999999999997288 2.328965582191213e-6
1304 .9999999999972606 2.340668926825318e-6
1305 .9999999999972332 2.352372271459423e-6
1306 .9999999999972056 2.364075616093528e-6
1307 .9999999999971778 2.3757789607276323e-6
1308 .99999999999715 2.3874823053617365e-6
1309 .999999999997122 2.3991856499958403e-6
1310 .9999999999970938 2.4108889946299437e-6
1311 .9999999999970656 2.4225923392640466e-6
1312 .9999999999970371 2.4342956838981495e-6
1313 .9999999999970085 2.445999028532252e-6
1314 .9999999999969799 2.457702373166354e-6
1315 .999999999996951 2.4694057178004558e-6
1316 .999999999996922 2.4811090624345574e-6
1317 .9999999999968929 2.4928124070686583e-6
1318 .9999999999968637 2.504515751702759e-6
1319 .9999999999968343 2.5162190963368595e-6
1320 .9999999999968048 2.5279224409709594e-6
1321 .9999999999967751 2.5396257856050594e-6
1322 .9999999999967454 2.5513291302391585e-6
1323 .9999999999967154 2.5630324748732576e-6
1324 .9999999999966853 2.5747358195073563e-6
1325 .9999999999966551 2.5864391641414546e-6
1326 .9999999999966248 2.5981425087755525e-6
1327 .9999999999965944 2.6098458534096503e-6
1328 .9999999999965637 2.6215491980437473e-6
1329 .999999999996533 2.6332525426778443e-6
1330 .9999999999965021 2.644955887311941e-6
1331 .999999999996471 2.656659231946037e-6
1332 .99999999999644 2.6683625765801328e-6
1333 .9999999999964087 2.680065921214228e-6
1334 .9999999999963772 2.6917692658483234e-6
1335 .9999999999963456 2.703472610482418e-6
1336 .999999999996314 2.7151759551165123e-6
1337 .9999999999962821 2.7268792997506064e-6
1338 .9999999999962501 2.7385826443846996e-6
1339 .9999999999962179 2.750285989018793e-6
1340 .9999999999961857 2.761989333652886e-6
1341 .9999999999961533 2.7736926782869783e-6
1342 .9999999999961208 2.78539602292107e-6
1343 .9999999999960881 2.797099367555162e-6
1344 .9999999999960553 2.808802712189253e-6
1345 .9999999999960224 2.8205060568233443e-6
1346 .9999999999959893 2.832209401457435e-6
1347 .9999999999959561 2.8439127460915247e-6
1348 .9999999999959227 2.8556160907256145e-6
1349 .9999999999958893 2.867319435359704e-6
1350 .9999999999958556 2.879022779993793e-6
1351 .9999999999958219 2.8907261246278814e-6
1352 .9999999999957879 2.90242946926197e-6
1353 .999999999995754 2.9141328138960576e-6
1354 .9999999999957198 2.925836158530145e-6
1355 .9999999999956855 2.9375395031642317e-6
1356 .999999999995651 2.9492428477983186e-6
1357 .9999999999956164 2.9609461924324046e-6
1358 .9999999999955816 2.9726495370664905e-6
1359 .9999999999955468 2.9843528817005757e-6
1360 .9999999999955118 2.996056226334661e-6
1361 .9999999999954767 3.007759570968745e-6
1362 .9999999999954414 3.0194629156028294e-6
1363 .999999999995406 3.0311662602369133e-6
1364 .9999999999953705 3.0428696048709963e-6
1365 .9999999999953348 3.0545729495050794e-6
1366 .999999999995299 3.066276294139162e-6
1367 .999999999995263 3.0779796387732437e-6
1368 .9999999999952269 3.0896829834073255e-6
1369 .9999999999951907 3.101386328041407e-6
1370 .9999999999951543 3.1130896726754873e-6
1371 .9999999999951178 3.1247930173095678e-6
1372 .9999999999950812 3.136496361943648e-6
1373 .9999999999950444 3.148199706577727e-6
1374 .9999999999950075 3.1599030512118063e-6
1375 .9999999999949705 3.171606395845885e-6
1376 .9999999999949333 3.183309740479963e-6
1377 .999999999994896 3.195013085114041e-6
1378 .9999999999948584 3.206716429748118e-6
1379 .9999999999948209 3.218419774382195e-6
1380 .9999999999947832 3.2301231190162714e-6
1381 .9999999999947453 3.2418264636503477e-6
1382 .9999999999947072 3.253529808284423e-6
1383 .9999999999946692 3.265233152918498e-6
1384 .9999999999946309 3.276936497552573e-6
1385 .9999999999945924 3.288639842186647e-6
1386 .9999999999945539 3.300343186820721e-6
1387 .9999999999945152 3.312046531454794e-6
1388 .9999999999944763 3.323749876088867e-6
1389 .9999999999944373 3.3354532207229395e-6
1390 .9999999999943983 3.3471565653570115e-6
1391 .9999999999943591 3.358859909991083e-6
1392 .9999999999943197 3.370563254625154e-6
1393 .9999999999942801 3.3822665992592245e-6
1394 .9999999999942405 3.3939699438932944e-6
1395 .9999999999942008 3.4056732885273643e-6
1396 .9999999999941608 3.4173766331614334e-6
1397 .9999999999941207 3.429079977795502e-6
1398 .9999999999940805 3.4407833224295702e-6
1399 .9999999999940402 3.452486667063638e-6
1400 .9999999999939997 3.4641900116977054e-6
1401 .999999999993959 3.4758933563317723e-6
1402 .9999999999939183 3.4875967009658384e-6
1403 .9999999999938775 3.4993000455999045e-6
1404 .9999999999938364 3.5110033902339697e-6
1405 .9999999999937953 3.5227067348680345e-6
1406 .999999999993754 3.534410079502099e-6
1407 .9999999999937126 3.546113424136163e-6
1408 .999999999993671 3.5578167687702264e-6
1409 .9999999999936293 3.5695201134042896e-6
1410 .9999999999935875 3.581223458038352e-6
1411 .9999999999935454 3.592926802672414e-6
1412 .9999999999935033 3.6046301473064755e-6
1413 .9999999999934611 3.6163334919405365e-6
1414 .9999999999934187 3.628036836574597e-6
1415 .9999999999933762 3.639740181208657e-6
1416 .9999999999933334 3.6514435258427166e-6
1417 .9999999999932907 3.6631468704767755e-6
1418 .9999999999932477 3.674850215110834e-6
1419 .9999999999932047 3.686553559744892e-6
1420 .9999999999931615 3.6982569043789496e-6
1421 .9999999999931181 3.7099602490130064e-6
1422 .9999999999930747 3.7216635936470627e-6
1423 .999999999993031 3.733366938281119e-6
1424 .9999999999929873 3.745070282915174e-6
1425 .9999999999929433 3.756773627549229e-6
1426 .9999999999928992 3.768476972183284e-6
1427 .9999999999928552 3.7801803168173377e-6
1428 .9999999999928109 3.791883661451391e-6
1429 .9999999999927663 3.803587006085444e-6
1430 .9999999999927218 3.8152903507194965e-6
1431 .9999999999926771 3.826993695353548e-6
1432 .9999999999926322 3.838697039987599e-6
1433 .9999999999925873 3.85040038462165e-6
1434 .9999999999925421 3.862103729255701e-6
1435 .9999999999924968 3.87380707388975e-6
1436 .9999999999924514 3.885510418523799e-6
1437 .9999999999924059 3.897213763157848e-6
1438 .9999999999923602 3.9089171077918965e-6
1439 .9999999999923144 3.9206204524259435e-6
1440 .9999999999922684 3.9323237970599905e-6
1441 .9999999999922223 3.9440271416940376e-6
1442 .9999999999921761 3.955730486328084e-6
1443 .9999999999921297 3.967433830962129e-6
1444 .9999999999920832 3.9791371755961736e-6
1445 .9999999999920366 3.990840520230218e-6
1446 .9999999999919899 4.002543864864262e-6
1447 .9999999999919429 4.014247209498305e-6
1448 .9999999999918958 4.025950554132348e-6
1449 .9999999999918486 4.03765389876639e-6
1450 .9999999999918013 4.049357243400431e-6
1451 .9999999999917539 4.061060588034472e-6
1452 .9999999999917063 4.072763932668513e-6
1453 .9999999999916586 4.084467277302553e-6
1454 .9999999999916107 4.096170621936592e-6
1455 .9999999999915626 4.107873966570632e-6
1456 .9999999999915146 4.119577311204669e-6
1457 .9999999999914663 4.131280655838707e-6
1458 .9999999999914179 4.142984000472745e-6
1459 .9999999999913692 4.154687345106781e-6
1460 .9999999999913206 4.166390689740817e-6
1461 .9999999999912718 4.178094034374852e-6
1462 .9999999999912228 4.189797379008887e-6
1463 .9999999999911737 4.201500723642921e-6
1464 .9999999999911244 4.213204068276955e-6
1465 .999999999991075 4.224907412910988e-6
1466 .9999999999910255 4.236610757545021e-6
1467 .9999999999909759 4.248314102179053e-6
1468 .9999999999909261 4.260017446813084e-6
1469 .9999999999908762 4.271720791447115e-6
1470 .9999999999908261 4.283424136081145e-6
1471 .9999999999907759 4.295127480715175e-6
1472 .9999999999907256 4.306830825349204e-6
1473 .9999999999906751 4.3185341699832325e-6
1474 .9999999999906245 4.33023751461726e-6
1475 .9999999999905738 4.3419408592512875e-6
1476 .9999999999905229 4.353644203885314e-6
1477 .9999999999904718 4.36534754851934e-6
1478 .9999999999904207 4.377050893153365e-6
1479 .9999999999903694 4.38875423778739e-6
1480 .999999999990318 4.400457582421414e-6
1481 .9999999999902665 4.4121609270554384e-6
1482 .9999999999902147 4.423864271689461e-6
1483 .9999999999901629 4.435567616323483e-6
1484 .9999999999901109 4.447270960957506e-6
1485 .9999999999900587 4.458974305591527e-6
1486 .9999999999900065 4.470677650225547e-6
1487 .9999999999899541 4.482380994859567e-6
1488 .9999999999899016 4.494084339493587e-6
1489 .9999999999898489 4.5057876841276054e-6
1490 .9999999999897962 4.517491028761624e-6
1491 .9999999999897432 4.529194373395641e-6
1492 .9999999999896901 4.5408977180296584e-6
1493 .999999999989637 4.552601062663675e-6
1494 .9999999999895836 4.564304407297691e-6
1495 .99999999998953 4.5760077519317055e-6
1496 .9999999999894764 4.5877110965657195e-6
1497 .9999999999894227 4.5994144411997335e-6
1498 .9999999999893688 4.611117785833747e-6
1499 .9999999999893148 4.622821130467759e-6
1500 .9999999999892606 4.634524475101771e-6
1501 .9999999999892063 4.646227819735783e-6
1502 .9999999999891518 4.657931164369793e-6
1503 .9999999999890973 4.669634509003803e-6
1504 .9999999999890425 4.681337853637813e-6
1505 .9999999999889877 4.693041198271821e-6
1506 .9999999999889327 4.704744542905829e-6
1507 .9999999999888776 4.716447887539837e-6
1508 .9999999999888223 4.728151232173843e-6
1509 .9999999999887669 4.73985457680785e-6
1510 .9999999999887114 4.751557921441855e-6
1511 .9999999999886556 4.76326126607586e-6
1512 .9999999999885999 4.774964610709864e-6
1513 .9999999999885439 4.786667955343868e-6
1514 .9999999999884878 4.798371299977871e-6
1515 .9999999999884316 4.810074644611873e-6
1516 .9999999999883752 4.821777989245874e-6
1517 .9999999999883187 4.833481333879875e-6
1518 .9999999999882621 4.845184678513876e-6
1519 .9999999999882053 4.856888023147875e-6
1520 .9999999999881484 4.868591367781874e-6
1521 .9999999999880914 4.880294712415872e-6
1522 .9999999999880341 4.89199805704987e-6
1523 .9999999999879768 4.903701401683867e-6
1524 .9999999999879194 4.915404746317863e-6
1525 .9999999999878618 4.9271080909518585e-6
1526 .9999999999878041 4.938811435585853e-6
1527 .9999999999877462 4.9505147802198475e-6
1528 .9999999999876882 4.962218124853841e-6
1529 .99999999998763 4.973921469487834e-6
1530 .9999999999875717 4.985624814121826e-6
1531 .9999999999875133 4.997328158755817e-6
1532 .9999999999874548 5.009031503389808e-6
1533 .9999999999873961 5.0207348480237985e-6
1534 .9999999999873372 5.032438192657788e-6
1535 .9999999999872783 5.0441415372917765e-6
1536 .9999999999872192 5.055844881925764e-6
1537 .9999999999871599 5.067548226559752e-6
1538 .9999999999871007 5.079251571193739e-6
1539 .9999999999870411 5.090954915827725e-6
1540 .9999999999869814 5.10265826046171e-6
1541 .9999999999869217 5.1143616050956945e-6
1542 .9999999999868617 5.126064949729678e-6
1543 .9999999999868017 5.1377682943636615e-6
1544 .9999999999867415 5.149471638997644e-6
1545 .9999999999866811 5.161174983631626e-6
1546 .9999999999866207 5.172878328265607e-6
1547 .9999999999865601 5.184581672899587e-6
1548 .9999999999864994 5.196285017533567e-6
1549 .9999999999864384 5.2079883621675455e-6
1550 .9999999999863775 5.219691706801524e-6
1551 .9999999999863163 5.2313950514355015e-6
1552 .999999999986255 5.243098396069478e-6
1553 .9999999999861935 5.254801740703454e-6
1554 .999999999986132 5.266505085337429e-6
1555 .9999999999860703 5.278208429971404e-6
1556 .9999999999860084 5.289911774605378e-6
1557 .9999999999859465 5.301615119239351e-6
1558 .9999999999858843 5.313318463873323e-6
1559 .9999999999858221 5.325021808507295e-6
1560 .9999999999857597 5.336725153141267e-6
1561 .9999999999856971 5.3484284977752366e-6
1562 .9999999999856345 5.360131842409206e-6
1563 .9999999999855717 5.371835187043175e-6
1564 .9999999999855087 5.383538531677143e-6
1565 .9999999999854456 5.3952418763111104e-6
1566 .9999999999853825 5.406945220945077e-6
1567 .9999999999853191 5.418648565579043e-6
1568 .9999999999852557 5.4303519102130076e-6
1569 .9999999999851921 5.4420552548469724e-6
1570 .9999999999851282 5.453758599480936e-6
1571 .9999999999850644 5.465461944114899e-6
1572 .9999999999850003 5.47716528874886e-6
1573 .9999999999849362 5.488868633382822e-6
1574 .9999999999848719 5.500571978016782e-6
1575 .9999999999848074 5.512275322650742e-6
1576 .9999999999847429 5.523978667284702e-6
1577 .9999999999846781 5.53568201191866e-6
1578 .9999999999846133 5.547385356552617e-6
1579 .9999999999845482 5.5590887011865745e-6
1580 .9999999999844832 5.57079204582053e-6
1581 .9999999999844179 5.582495390454486e-6
1582 .9999999999843525 5.59419873508844e-6
1583 .9999999999842869 5.605902079722394e-6
1584 .9999999999842213 5.617605424356347e-6
1585 .9999999999841555 5.629308768990299e-6
1586 .9999999999840895 5.641012113624251e-6
1587 .9999999999840234 5.652715458258201e-6
1588 .9999999999839572 5.664418802892152e-6
1589 .9999999999838908 5.6761221475261e-6
1590 .9999999999838243 5.687825492160048e-6
1591 .9999999999837577 5.699528836793996e-6
1592 .9999999999836909 5.711232181427943e-6
1593 .999999999983624 5.722935526061889e-6
1594 .9999999999835569 5.734638870695834e-6
1595 .9999999999834898 5.746342215329779e-6
1596 .9999999999834225 5.758045559963722e-6
1597 .999999999983355 5.769748904597665e-6
1598 .9999999999832874 5.781452249231607e-6
1599 .9999999999832196 5.793155593865548e-6
1600 .9999999999831518 5.804858938499489e-6
1601 .9999999999830838 5.816562283133429e-6
1602 .9999999999830157 5.8282656277673675e-6
1603 .9999999999829474 5.839968972401306e-6
1604 .9999999999828789 5.851672317035243e-6
1605 .9999999999828104 5.86337566166918e-6
1606 .9999999999827417 5.875079006303115e-6
1607 .9999999999826729 5.88678235093705e-6
1608 .9999999999826039 5.898485695570985e-6
1609 .9999999999825349 5.910189040204917e-6
1610 .9999999999824656 5.92189238483885e-6
1611 .9999999999823962 5.933595729472782e-6
1612 .9999999999823267 5.945299074106713e-6
1613 .9999999999822571 5.957002418740643e-6
1614 .9999999999821872 5.9687057633745715e-6
1615 .9999999999821173 5.9804091080085e-6
1616 )))
1617
1618(define (make-w log-n)
1619 (let ((n (expt 2 log-n))) ;; number of complexes
1620 (if (fx<= n lut-table-size)
1621 low-lut
1622 (let ((result (make-f64vector (fx* 2 n))))
1623
1624 (define (copy-low-lut)
1625 (do ((i 0 (fx+ i 1)))
1626 ((fx= i lut-table-size))
1627 (let ((index (fx* i 2)))
1628 (f64vector-set!
1629 result
1630 index
1631 (f64vector-ref low-lut index))
1632 (f64vector-set!
1633 result
1634 (fx+ index 1)
1635 (f64vector-ref low-lut (fx+ index 1))))))
1636
1637 (define (extend-lut multiplier-lut bit-reverse-size bit-reverse-multiplier start end)
1638
1639 (define (bit-reverse x n)
1640 (do ((i 0 (fx+ i 1))
1641 (x x (fxarithmetic-shift-right x 1))
1642 (result 0 (fx+ (fx* result 2)
1643 (bitwise-and x 1))))
1644 ((fx= i n) result)))
1645
1646 (let loop ((i start)
1647 (j 1))
1648 (if (fx< i end)
1649 (let* ((multiplier-index
1650 (fx* 2
1651 (fx* (bit-reverse j bit-reverse-size)
1652 bit-reverse-multiplier)))
1653 (multiplier-real
1654 (f64vector-ref multiplier-lut multiplier-index))
1655 (multiplier-imag
1656 (f64vector-ref multiplier-lut (fx+ multiplier-index 1))))
1657 (let inner ((i i)
1658 (k 0))
1659 ;; we copy complex multiples of all entries below
1660 ;; start to entries starting at start
1661 (if (fx< k start)
1662 (let* ((index
1663 (fx* k 2))
1664 (real
1665 (f64vector-ref result index))
1666 (imag
1667 (f64vector-ref result (fx+ index 1)))
1668 (result-real
1669 (fl- (fl* multiplier-real real)
1670 (fl* multiplier-imag imag)))
1671 (result-imag
1672 (fl+ (fl* multiplier-real imag)
1673 (fl* multiplier-imag real)))
1674 (result-index (fx* i 2)))
1675 (f64vector-set! result result-index result-real)
1676 (f64vector-set! result (fx+ result-index 1) result-imag)
1677 (inner (fx+ i 1)
1678 (fx+ k 1)))
1679 (loop i
1680 (fx+ j 1)))))
1681 result)))
1682
1683 (cond ((fx<= n lut-table-size^2)
1684 (copy-low-lut)
1685 (extend-lut med-lut
1686 (fx- log-n log-lut-table-size)
1687 (fxarithmetic-shift-left 1 (fx- (fx* 2 log-lut-table-size) log-n))
1688 lut-table-size
1689 n))
1690 ((fx<= n lut-table-size^3)
1691 (copy-low-lut)
1692 (extend-lut med-lut
1693 log-lut-table-size
1694 1
1695 lut-table-size
1696 lut-table-size^2)
1697 (extend-lut high-lut
1698 (fx- log-n (fx* 2 log-lut-table-size))
1699 (fxarithmetic-shift-left 1 (fx- (fx* 3 log-lut-table-size) log-n))
1700 lut-table-size^2
1701 n))
1702 (else
1703 (error "asking for too large a table")))))))
1704
1705(define (direct-fft-recursive-4 a W-table)
1706
1707 ;; This is a direcct complex fft, using a decimation-in-time
1708 ;; algorithm with inputs in natural order and outputs in
1709 ;; bit-reversed order. The table of "twiddle" factors is in
1710 ;; bit-reversed order.
1711
1712 ;; this is from page 66 of Chu and George, except that we have
1713 ;; combined passes in pairs to cut the number of passes through
1714 ;; the vector a
1715
1716 (let ((W (f64vector 0. 0. 0. 0.)))
1717
1718 (define (main-loop M N K SizeOfGroup)
1719
1720 (let inner-loop ((K K)
1721 (JFirst M))
1722
1723 (if (fx< JFirst N)
1724
1725 (let* ((JLast (fx+ JFirst SizeOfGroup)))
1726
1727 (if (fxeven? K)
1728 (begin
1729 (f64vector-set! W 0 (f64vector-ref W-table K))
1730 (f64vector-set! W 1 (f64vector-ref W-table (fx+ K 1))))
1731 (begin
1732 (f64vector-set! W 0 (fl- 0. (f64vector-ref W-table K)))
1733 (f64vector-set! W 1 (f64vector-ref W-table (fx- K 1)))))
1734
1735 ;; we know the that the next two complex roots of
1736 ;; unity have index 2K and 2K+1 so that the 2K+1
1737 ;; index root can be gotten from the 2K index root
1738 ;; in the same way that we get W_0 and W_1 from the
1739 ;; table depending on whether K is even or not
1740
1741 (f64vector-set! W 2 (f64vector-ref W-table (fx* K 2)))
1742 (f64vector-set! W 3 (f64vector-ref W-table (fx+ (fx* K 2) 1)))
1743
1744 (let J-loop ((J0 JFirst))
1745 (if (fx< J0 JLast)
1746
1747 (let* ((J0 J0)
1748 (J1 (fx+ J0 1))
1749 (J2 (fx+ J0 SizeOfGroup))
1750 (J3 (fx+ J2 1))
1751 (J4 (fx+ J2 SizeOfGroup))
1752 (J5 (fx+ J4 1))
1753 (J6 (fx+ J4 SizeOfGroup))
1754 (J7 (fx+ J6 1)))
1755
1756 (let ((W_0 (f64vector-ref W 0))
1757 (W_1 (f64vector-ref W 1))
1758 (W_2 (f64vector-ref W 2))
1759 (W_3 (f64vector-ref W 3))
1760 (a_J0 (f64vector-ref a J0))
1761 (a_J1 (f64vector-ref a J1))
1762 (a_J2 (f64vector-ref a J2))
1763 (a_J3 (f64vector-ref a J3))
1764 (a_J4 (f64vector-ref a J4))
1765 (a_J5 (f64vector-ref a J5))
1766 (a_J6 (f64vector-ref a J6))
1767 (a_J7 (f64vector-ref a J7)))
1768
1769 ;; first we do the (overlapping) pairs of
1770 ;; butterflies with entries 2*SizeOfGroup
1771 ;; apart.
1772
1773 (let ((Temp_0 (fl- (fl* W_0 a_J4)
1774 (fl* W_1 a_J5)))
1775 (Temp_1 (fl+ (fl* W_0 a_J5)
1776 (fl* W_1 a_J4)))
1777 (Temp_2 (fl- (fl* W_0 a_J6)
1778 (fl* W_1 a_J7)))
1779 (Temp_3 (fl+ (fl* W_0 a_J7)
1780 (fl* W_1 a_J6))))
1781
1782 (let ((a_J0 (fl+ a_J0 Temp_0))
1783 (a_J1 (fl+ a_J1 Temp_1))
1784 (a_J2 (fl+ a_J2 Temp_2))
1785 (a_J3 (fl+ a_J3 Temp_3))
1786 (a_J4 (fl- a_J0 Temp_0))
1787 (a_J5 (fl- a_J1 Temp_1))
1788 (a_J6 (fl- a_J2 Temp_2))
1789 (a_J7 (fl- a_J3 Temp_3)))
1790
1791 ;; now we do the two (disjoint) pairs
1792 ;; of butterflies distance SizeOfGroup
1793 ;; apart, the first pair with W2+W3i,
1794 ;; the second with -W3+W2i
1795
1796 ;; we rewrite the multipliers so I
1797 ;; don't hurt my head too much when
1798 ;; thinking about them.
1799
1800 (let ((W_0 W_2)
1801 (W_1 W_3)
1802 (W_2 (fl- 0. W_3))
1803 (W_3 W_2))
1804
1805 (let ((Temp_0
1806 (fl- (fl* W_0 a_J2)
1807 (fl* W_1 a_J3)))
1808 (Temp_1
1809 (fl+ (fl* W_0 a_J3)
1810 (fl* W_1 a_J2)))
1811 (Temp_2
1812 (fl- (fl* W_2 a_J6)
1813 (fl* W_3 a_J7)))
1814 (Temp_3
1815 (fl+ (fl* W_2 a_J7)
1816 (fl* W_3 a_J6))))
1817
1818 (let ((a_J0 (fl+ a_J0 Temp_0))
1819 (a_J1 (fl+ a_J1 Temp_1))
1820 (a_J2 (fl- a_J0 Temp_0))
1821 (a_J3 (fl- a_J1 Temp_1))
1822 (a_J4 (fl+ a_J4 Temp_2))
1823 (a_J5 (fl+ a_J5 Temp_3))
1824 (a_J6 (fl- a_J4 Temp_2))
1825 (a_J7 (fl- a_J5 Temp_3)))
1826
1827 (f64vector-set! a J0 a_J0)
1828 (f64vector-set! a J1 a_J1)
1829 (f64vector-set! a J2 a_J2)
1830 (f64vector-set! a J3 a_J3)
1831 (f64vector-set! a J4 a_J4)
1832 (f64vector-set! a J5 a_J5)
1833 (f64vector-set! a J6 a_J6)
1834 (f64vector-set! a J7 a_J7)
1835
1836 (J-loop (fx+ J0 2)))))))))
1837 (inner-loop (fx+ K 1)
1838 (fx+ JFirst (fx* SizeOfGroup 4)))))))))
1839
1840 (define (recursive-bit M N K SizeOfGroup)
1841 (if (fx<= 2 SizeOfGroup)
1842 (begin
1843 (main-loop M N K SizeOfGroup)
1844 (if (fx< 2048 (fx- N M))
1845 (let ((new-size (fxarithmetic-shift-right (fx- N M) 2)))
1846 (recursive-bit M
1847 (fx+ M new-size)
1848 (fx* K 4)
1849 (fxarithmetic-shift-right SizeOfGroup 2))
1850 (recursive-bit (fx+ M new-size)
1851 (fx+ M (fx* new-size 2))
1852 (fx+ (fx* K 4) 1)
1853 (fxarithmetic-shift-right SizeOfGroup 2))
1854 (recursive-bit (fx+ M (fx* new-size 2))
1855 (fx+ M (fx* new-size 3))
1856 (fx+ (fx* K 4) 2)
1857 (fxarithmetic-shift-right SizeOfGroup 2))
1858 (recursive-bit (fx+ M (fx* new-size 3))
1859 N
1860 (fx+ (fx* K 4) 3)
1861 (fxarithmetic-shift-right SizeOfGroup 2)))
1862 (recursive-bit M
1863 N
1864 (fx* K 4)
1865 (fxarithmetic-shift-right SizeOfGroup 2))))))
1866
1867 (define (radix-2-pass a)
1868
1869 ;; If we're here, the size of our (conceptually complex)
1870 ;; array is not a power of 4, so we need to do a basic radix
1871 ;; two pass with w=1 (so W[0]=1.0 and W[1] = 0.) and then
1872 ;; call recursive-bit appropriately on the two half arrays.
1873
1874 (let ((SizeOfGroup
1875 (fxarithmetic-shift-right (f64vector-length a) 1)))
1876 (let loop ((J0 0))
1877 (if (fx< J0 SizeOfGroup)
1878 (let ((J0 J0)
1879 (J2 (fx+ J0 SizeOfGroup)))
1880 (let ((J1 (fx+ J0 1))
1881 (J3 (fx+ J2 1)))
1882 (let ((a_J0 (f64vector-ref a J0))
1883 (a_J1 (f64vector-ref a J1))
1884 (a_J2 (f64vector-ref a J2))
1885 (a_J3 (f64vector-ref a J3)))
1886 (let ((a_J0 (fl+ a_J0 a_J2))
1887 (a_J1 (fl+ a_J1 a_J3))
1888 (a_J2 (fl- a_J0 a_J2))
1889 (a_J3 (fl- a_J1 a_J3)))
1890 (f64vector-set! a J0 a_J0)
1891 (f64vector-set! a J1 a_J1)
1892 (f64vector-set! a J2 a_J2)
1893 (f64vector-set! a J3 a_J3)
1894 (loop (fx+ J0 2))))))))))
1895
1896 (let* ((n (f64vector-length a))
1897 (log_n (two^p>=m n)))
1898
1899 ;; there are n/2 complex entries in a; if n/2 is not a power
1900 ;; of 4, then do a single radix-2 pass and do the rest of
1901 ;; the passes as radix-4 passes
1902
1903 (if (fxodd? log_n)
1904 (recursive-bit 0 n 0 (fxarithmetic-shift-right n 2))
1905 (let ((n/2 (fxarithmetic-shift-right n 1))
1906 (n/8 (fxarithmetic-shift-right n 3)))
1907 (radix-2-pass a)
1908 (recursive-bit 0 n/2 0 n/8)
1909 (recursive-bit n/2 n 1 n/8))))))
1910
1911(define (inverse-fft-recursive-4 a W-table)
1912
1913 ;; This is an complex fft, using a decimation-in-frequency algorithm
1914 ;; with inputs in bit-reversed order and outputs in natural order.
1915
1916 ;; The organization of the algorithm has little to do with the
1917 ;; associated algorithm on page 41 of Chu and George,
1918 ;; I just reversed the operations of the direct algorithm given
1919 ;; above (without dividing by 2 each time, so that this has to
1920 ;; be "normalized" by dividing by N/2 at the end.
1921
1922 ;; The table of "twiddle" factors is in bit-reversed order.
1923
1924 (let ((W (f64vector 0. 0. 0. 0.)))
1925
1926 (define (main-loop M N K SizeOfGroup)
1927 (let inner-loop ((K K)
1928 (JFirst M))
1929 (if (fx< JFirst N)
1930 (let* ((JLast (fx+ JFirst SizeOfGroup)))
1931 (if (fxeven? K)
1932 (begin
1933 (f64vector-set! W 0 (f64vector-ref W-table K))
1934 (f64vector-set! W 1 (f64vector-ref W-table (fx+ K 1))))
1935 (begin
1936 (f64vector-set! W 0 (fl- 0. (f64vector-ref W-table K)))
1937 (f64vector-set! W 1 (f64vector-ref W-table (fx- K 1)))))
1938 (f64vector-set! W 2 (f64vector-ref W-table (fx* K 2)))
1939 (f64vector-set! W 3 (f64vector-ref W-table (fx+ (fx* K 2) 1)))
1940 (let J-loop ((J0 JFirst))
1941 (if (fx< J0 JLast)
1942 (let* ((J0 J0)
1943 (J1 (fx+ J0 1))
1944 (J2 (fx+ J0 SizeOfGroup))
1945 (J3 (fx+ J2 1))
1946 (J4 (fx+ J2 SizeOfGroup))
1947 (J5 (fx+ J4 1))
1948 (J6 (fx+ J4 SizeOfGroup))
1949 (J7 (fx+ J6 1)))
1950 (let ((W_0 (f64vector-ref W 0))
1951 (W_1 (f64vector-ref W 1))
1952 (W_2 (f64vector-ref W 2))
1953 (W_3 (f64vector-ref W 3))
1954 (a_J0 (f64vector-ref a J0))
1955 (a_J1 (f64vector-ref a J1))
1956 (a_J2 (f64vector-ref a J2))
1957 (a_J3 (f64vector-ref a J3))
1958 (a_J4 (f64vector-ref a J4))
1959 (a_J5 (f64vector-ref a J5))
1960 (a_J6 (f64vector-ref a J6))
1961 (a_J7 (f64vector-ref a J7)))
1962 (let ((W_00 W_2)
1963 (W_01 W_3)
1964 (W_02 (fl- 0. W_3))
1965 (W_03 W_2))
1966 (let ((Temp_0 (fl- a_J0 a_J2))
1967 (Temp_1 (fl- a_J1 a_J3))
1968 (Temp_2 (fl- a_J4 a_J6))
1969 (Temp_3 (fl- a_J5 a_J7)))
1970 (let ((a_J0 (fl+ a_J0 a_J2))
1971 (a_J1 (fl+ a_J1 a_J3))
1972 (a_J4 (fl+ a_J4 a_J6))
1973 (a_J5 (fl+ a_J5 a_J7))
1974 (a_J2 (fl+ (fl* W_00 Temp_0)
1975 (fl* W_01 Temp_1)))
1976 (a_J3 (fl- (fl* W_00 Temp_1)
1977 (fl* W_01 Temp_0)))
1978 (a_J6 (fl+ (fl* W_02 Temp_2)
1979 (fl* W_03 Temp_3)))
1980 (a_J7 (fl- (fl* W_02 Temp_3)
1981 (fl* W_03 Temp_2))))
1982 (let ((Temp_0 (fl- a_J0 a_J4))
1983 (Temp_1 (fl- a_J1 a_J5))
1984 (Temp_2 (fl- a_J2 a_J6))
1985 (Temp_3 (fl- a_J3 a_J7)))
1986 (let ((a_J0 (fl+ a_J0 a_J4))
1987 (a_J1 (fl+ a_J1 a_J5))
1988 (a_J2 (fl+ a_J2 a_J6))
1989 (a_J3 (fl+ a_J3 a_J7))
1990 (a_J4 (fl+ (fl* W_0 Temp_0)
1991 (fl* W_1 Temp_1)))
1992 (a_J5 (fl- (fl* W_0 Temp_1)
1993 (fl* W_1 Temp_0)))
1994 (a_J6 (fl+ (fl* W_0 Temp_2)
1995 (fl* W_1 Temp_3)))
1996 (a_J7 (fl- (fl* W_0 Temp_3)
1997 (fl* W_1 Temp_2))))
1998 (f64vector-set! a J0 a_J0)
1999 (f64vector-set! a J1 a_J1)
2000 (f64vector-set! a J2 a_J2)
2001 (f64vector-set! a J3 a_J3)
2002 (f64vector-set! a J4 a_J4)
2003 (f64vector-set! a J5 a_J5)
2004 (f64vector-set! a J6 a_J6)
2005 (f64vector-set! a J7 a_J7)
2006 (J-loop (fx+ J0 2)))))))))
2007 (inner-loop (fx+ K 1)
2008 (fx+ JFirst (fx* SizeOfGroup 4)))))))))
2009
2010 (define (recursive-bit M N K SizeOfGroup)
2011 (if (fx<= 2 SizeOfGroup)
2012 (begin
2013 (if (fx< 2048 (fx- N M))
2014 (let ((new-size (fxarithmetic-shift-right (fx- N M) 2)))
2015 (recursive-bit M
2016 (fx+ M new-size)
2017 (fx* K 4)
2018 (fxarithmetic-shift-right SizeOfGroup 2))
2019 (recursive-bit (fx+ M new-size)
2020 (fx+ M (fx* new-size 2))
2021 (fx+ (fx* K 4) 1)
2022 (fxarithmetic-shift-right SizeOfGroup 2))
2023 (recursive-bit (fx+ M (fx* new-size 2))
2024 (fx+ M (fx* new-size 3))
2025 (fx+ (fx* K 4) 2)
2026 (fxarithmetic-shift-right SizeOfGroup 2))
2027 (recursive-bit (fx+ M (fx* new-size 3))
2028 N
2029 (fx+ (fx* K 4) 3)
2030 (fxarithmetic-shift-right SizeOfGroup 2)))
2031 (recursive-bit M
2032 N
2033 (fx* K 4)
2034 (fxarithmetic-shift-right SizeOfGroup 2)))
2035 (main-loop M N K SizeOfGroup))))
2036
2037 (define (radix-2-pass a)
2038 (let ((SizeOfGroup
2039 (fxarithmetic-shift-right (f64vector-length a) 1)))
2040 (let loop ((J0 0))
2041 (if (fx< J0 SizeOfGroup)
2042 (let ((J0 J0)
2043 (J2 (fx+ J0 SizeOfGroup)))
2044 (let ((J1 (fx+ J0 1))
2045 (J3 (fx+ J2 1)))
2046 (let ((a_J0 (f64vector-ref a J0))
2047 (a_J1 (f64vector-ref a J1))
2048 (a_J2 (f64vector-ref a J2))
2049 (a_J3 (f64vector-ref a J3)))
2050 (let ((a_J0 (fl+ a_J0 a_J2))
2051 (a_J1 (fl+ a_J1 a_J3))
2052 (a_J2 (fl- a_J0 a_J2))
2053 (a_J3 (fl- a_J1 a_J3)))
2054 (f64vector-set! a J0 a_J0)
2055 (f64vector-set! a J1 a_J1)
2056 (f64vector-set! a J2 a_J2)
2057 (f64vector-set! a J3 a_J3)
2058 (loop (fx+ J0 2))))))))))
2059
2060 (let* ((n (f64vector-length a))
2061 (log_n (two^p>=m n)))
2062 (if (fxodd? log_n)
2063 (recursive-bit 0 n 0 (fxarithmetic-shift-right n 2))
2064 (let ((n/2 (fxarithmetic-shift-right n 1))
2065 (n/8 (fxarithmetic-shift-right n 3)))
2066 (recursive-bit 0 n/2 0 n/8)
2067 (recursive-bit n/2 n 1 n/8)
2068 (radix-2-pass a))))))
2069
2070(define (two^p>=m m)
2071 ;; returns smallest p, assumes fixnum m >= 0
2072 (do ((p 0 (fx+ p 1))
2073 (two^p 1 (fx* two^p 2)))
2074 ((fx<= m two^p) p)))
2075
2076(define (test iters n)
2077 (let ((two^n
2078 (expt 2 n))
2079 (table
2080 (make-w (fx- n 1))))
2081 ;(display (fx* two^n 2))(newline)
2082 (let ((a
2083 (make-f64vector (fx* two^n 2) 0.)))
2084 (do ((i 0 (fx+ i 1)))
2085 ((fx= i iters)
2086 ;(write table) (newline)
2087 )
2088 (direct-fft-recursive-4 a table)
2089 (inverse-fft-recursive-4 a table)))))
2090
2091(cond-expand
2092 (chicken
2093 (let-optionals (command-line-arguments)
2094 ((iters "2000")
2095 (n "11"))
2096 (test (string->number iters) (string->number n))))
2097 (else (test 2000 11)))