-----------------------------------------------------------
hi everyone
you owe me an award, or recognition, or something, because
tired of expensive trig calls???!
let me hug and kiss it better
i have called the circular osc the "ginsu dsp" for a while now.. "it oscillates, it filters.."
basically i got tired of cpu intensive functions and decided to let this puppy deal with it.
i know, i know, people say "the circular osc is elliptical, it has inherent error for use as a sine" but you know, i don't care what you say
---------------------------------------------------
here is an inexpensive method of simultaneously approximating cosine and sine for given angle w (in radians) with really, really nice accuracy for just mucking about -
wit = w / iterations;
s0 = 1; (cosine)
s1 = wit; (sine)
loop (wit - 1) times
s0 -= s1 * wit;
s1 += s0 * wit;
generate s0 one more time and average it with the result you have.
accuracy:
angle: 1 * pi / 16
iterations: 1 error cos: 6.556510925e-07 error sin: 4.068389535e-05
iterations: 2 error cos: 1.788139343e-07 error sin: 1.016631722e-05
iterations: 3 error cos: 5.960464478e-08 error sin: 4.522502422e-06
iterations: 4 error cos: 5.960464478e-08 error sin: 2.540647984e-06
iterations: 5 error cos: 5.960464478e-08 error sin: 1.631677151e-06
iterations: 6 error cos: 5.960464478e-08 error sin: 1.132488251e-06
iterations: 7 error cos: 0 error sin: 8.344650269e-07
iterations: 8 error cos: 0 error sin: 6.332993507e-07
iterations: 9 error cos: 0 error sin: 5.103647709e-07
iterations: 10 error cos: 0 error sin: 4.135072231e-07
iterations: 11 error cos: 5.960464478e-08 error sin: 3.352761269e-07
iterations: 12 error cos: 0 error sin: 2.86847353e-07
iterations: 13 error cos: 5.960464478e-08 error sin: 2.421438694e-07
iterations: 14 error cos: 5.960464478e-08 error sin: 2.12341547e-07
iterations: 15 error cos: 5.960464478e-08 error sin: 1.825392246e-07
iterations: 16 error cos: 1.192092896e-07 error sin: 1.527369022e-07
angle: 2 * pi / 16
iterations: 1 error cos: 1.019239426e-05 error sin: 0.0003252699971
iterations: 2 error cos: 2.562999725e-06 error sin: 8.112937212e-05
iterations: 3 error cos: 1.192092896e-06 error sin: 3.604590893e-05
iterations: 4 error cos: 6.556510925e-07 error sin: 2.02730298e-05
iterations: 5 error cos: 4.768371582e-07 error sin: 1.29789114e-05
iterations: 6 error cos: 3.576278687e-07 error sin: 9.015202522e-06
iterations: 7 error cos: 2.384185791e-07 error sin: 6.623566151e-06
iterations: 8 error cos: 1.788139343e-07 error sin: 5.066394806e-06
iterations: 9 error cos: 5.960464478e-08 error sin: 4.008412361e-06
iterations: 10 error cos: 5.960464478e-08 error sin: 3.255903721e-06
iterations: 11 error cos: 1.192092896e-07 error sin: 2.689659595e-06
iterations: 12 error cos: 5.960464478e-08 error sin: 2.257525921e-06
iterations: 13 error cos: 5.960464478e-08 error sin: 1.922249794e-06
iterations: 14 error cos: 0 error sin: 1.668930054e-06
iterations: 15 error cos: 5.960464478e-08 error sin: 1.445412636e-06
iterations: 16 error cos: 1.192092896e-07 error sin: 1.259148121e-06
angle: 3 * pi / 16
iterations: 1 error cos: 5.143880844e-05 error sin: 0.001096710563
iterations: 2 error cos: 1.281499863e-05 error sin: 0.0002727359533
iterations: 3 error cos: 5.662441254e-06 error sin: 0.000121101737
iterations: 4 error cos: 3.218650818e-06 error sin: 6.809830666e-05
iterations: 5 error cos: 2.026557922e-06 error sin: 4.358589649e-05
iterations: 6 error cos: 1.37090683e-06 error sin: 3.026425838e-05
iterations: 7 error cos: 1.072883606e-06 error sin: 2.224743366e-05
iterations: 8 error cos: 8.344650269e-07 error sin: 1.703202724e-05
iterations: 9 error cos: 7.152557373e-07 error sin: 1.345574856e-05
iterations: 10 error cos: 4.768371582e-07 error sin: 1.092255116e-05
iterations: 11 error cos: 4.768371582e-07 error sin: 9.000301361e-06
iterations: 12 error cos: 2.980232239e-07 error sin: 7.584691048e-06
iterations: 13 error cos: 2.980232239e-07 error sin: 6.467103958e-06
iterations: 14 error cos: 2.980232239e-07 error sin: 5.558133125e-06
iterations: 15 error cos: 1.788139343e-07 error sin: 4.87267971e-06
iterations: 16 error cos: 2.384185791e-07 error sin: 4.261732101e-06
angle: 4 * pi / 16
iterations: 1 error cos: 0.000162422657 error sin: 0.0025960356
iterations: 2 error cos: 4.035234451e-05 error sin: 0.0006429105997
iterations: 3 error cos: 1.788139343e-05 error sin: 0.0002852529287
iterations: 4 error cos: 1.007318497e-05 error sin: 0.0001603513956
iterations: 5 error cos: 6.437301636e-06 error sin: 0.0001025795937
iterations: 6 error cos: 4.470348358e-06 error sin: 7.124245167e-05
iterations: 7 error cos: 3.278255463e-06 error sin: 5.234777927e-05
iterations: 8 error cos: 2.503395081e-06 error sin: 4.006922245e-05
iterations: 9 error cos: 1.966953278e-06 error sin: 3.165006638e-05
iterations: 10 error cos: 1.668930054e-06 error sin: 2.562999725e-05
iterations: 11 error cos: 1.311302185e-06 error sin: 2.118945122e-05
iterations: 12 error cos: 1.132488251e-06 error sin: 1.780688763e-05
iterations: 13 error cos: 1.013278961e-06 error sin: 1.518428326e-05
iterations: 14 error cos: 8.344650269e-07 error sin: 1.306831837e-05
iterations: 15 error cos: 6.556510925e-07 error sin: 1.141428947e-05
iterations: 16 error cos: 5.960464478e-07 error sin: 1.002848148e-05
angle: 5 * pi / 16
iterations: 1 error cos: 0.0003960728645 error sin: 0.005061477423
iterations: 2 error cos: 9.804964066e-05 error sin: 0.001246780157
iterations: 3 error cos: 4.351139069e-05 error sin: 0.000552624464
iterations: 4 error cos: 2.443790436e-05 error sin: 0.0003105401993
iterations: 5 error cos: 1.561641693e-05 error sin: 0.000198662281
iterations: 6 error cos: 1.084804535e-05 error sin: 0.000137925148
iterations: 7 error cos: 7.9870224e-06 error sin: 0.0001012980938
iterations: 8 error cos: 6.139278412e-06 error sin: 7.754564285e-05
iterations: 9 error cos: 4.827976227e-06 error sin: 6.127357483e-05
iterations: 10 error cos: 3.87430191e-06 error sin: 4.96506691e-05
iterations: 11 error cos: 3.218650818e-06 error sin: 4.103779793e-05
iterations: 12 error cos: 2.74181366e-06 error sin: 3.4481287e-05
iterations: 13 error cos: 2.324581146e-06 error sin: 2.938508987e-05
iterations: 14 error cos: 1.907348633e-06 error sin: 2.533197403e-05
iterations: 15 error cos: 1.788139343e-06 error sin: 2.205371857e-05
iterations: 16 error cos: 1.549720764e-06 error sin: 1.937150955e-05
angle: 6 * pi / 16
iterations: 1 error cos: 0.0008201003075 error sin: 0.0087274611
iterations: 2 error cos: 0.0002021193504 error sin: 0.002135664225
iterations: 3 error cos: 8.95857811e-05 error sin: 0.0009454786777
iterations: 4 error cos: 5.030632019e-05 error sin: 0.0005311071873
iterations: 5 error cos: 3.218650818e-05 error sin: 0.0003396868706
iterations: 6 error cos: 2.235174179e-05 error sin: 0.0002358257771
iterations: 7 error cos: 1.639127731e-05 error sin: 0.0001732409
iterations: 8 error cos: 1.25169754e-05 error sin: 0.0001325905323
iterations: 9 error cos: 9.894371033e-06 error sin: 0.0001047849655
iterations: 10 error cos: 8.046627045e-06 error sin: 8.484721184e-05
iterations: 11 error cos: 6.675720215e-06 error sin: 7.009506226e-05
iterations: 12 error cos: 5.543231964e-06 error sin: 5.891919136e-05
iterations: 13 error cos: 4.649162292e-06 error sin: 5.01871109e-05
iterations: 14 error cos: 4.11272049e-06 error sin: 4.327297211e-05
iterations: 15 error cos: 3.635883331e-06 error sin: 3.764033318e-05
iterations: 16 error cos: 3.218650818e-06 error sin: 3.311038017e-05
angle: 7 * pi / 16
iterations: 1 error cos: 0.001516819 error sin: 0.01382374763
iterations: 2 error cos: 0.0003719329834 error sin: 0.003356218338
iterations: 3 error cos: 0.0001647472382 error sin: 0.001483738422
iterations: 4 error cos: 9.256601334e-05 error sin: 0.0008330643177
iterations: 5 error cos: 5.924701691e-05 error sin: 0.0005327165127
iterations: 6 error cos: 4.106760025e-05 error sin: 0.0003697574139
iterations: 7 error cos: 3.02195549e-05 error sin: 0.0002716183662
iterations: 8 error cos: 2.312660217e-05 error sin: 0.000207901001
iterations: 9 error cos: 1.82390213e-05 error sin: 0.000164270401
iterations: 10 error cos: 1.484155655e-05 error sin: 0.0001330077648
iterations: 11 error cos: 1.221895218e-05 error sin: 0.0001099407673
iterations: 12 error cos: 1.02519989e-05 error sin: 9.241700172e-05
iterations: 13 error cos: 8.881092072e-06 error sin: 7.86781311e-05
iterations: 14 error cos: 7.510185242e-06 error sin: 6.785988808e-05
iterations: 15 error cos: 6.496906281e-06 error sin: 5.912780762e-05
iterations: 16 error cos: 5.841255188e-06 error sin: 5.194544792e-05
angle: 8 * pi / 16
iterations: 1 error cos: 0.002582550049 error sin: 0.02057445049
iterations: 2 error cos: 0.0006294250488 error sin: 0.004949450493
iterations: 3 error cos: 0.0002784729004 error sin: 0.002184540033
iterations: 4 error cos: 0.0001564025879 error sin: 0.001225829124
iterations: 5 error cos: 0.0001000165939 error sin: 0.0007836520672
iterations: 6 error cos: 6.943941116e-05 error sin: 0.0005438923836
iterations: 7 error cos: 5.090236664e-05 error sin: 0.0003994703293
iterations: 8 error cos: 3.904104233e-05 error sin: 0.0003057718277
iterations: 9 error cos: 3.087520599e-05 error sin: 0.0002415180206
iterations: 10 error cos: 2.497434616e-05 error sin: 0.0001956224442
iterations: 11 error cos: 2.074241638e-05 error sin: 0.0001616477966
iterations: 12 error cos: 1.734495163e-05 error sin: 0.0001358687878
iterations: 13 error cos: 1.484155655e-05 error sin: 0.0001157820225
iterations: 14 error cos: 1.269578934e-05 error sin: 9.983778e-05
iterations: 15 error cos: 1.096725464e-05 error sin: 8.699297905e-05
iterations: 16 error cos: 9.715557098e-06 error sin: 7.638335228e-05
angle: 9 * pi / 16
iterations: 1 error cos: 0.004127621651 error sin: 0.02919733524
iterations: 2 error cos: 0.0009990930557 error sin: 0.00695002079
iterations: 3 error cos: 0.0004414319992 error sin: 0.003061890602
iterations: 4 error cos: 0.000247836113 error sin: 0.001717031002
iterations: 5 error cos: 0.0001584291458 error sin: 0.001097381115
iterations: 6 error cos: 0.000109910965 error sin: 0.0007615089417
iterations: 7 error cos: 8.076429367e-05 error sin: 0.0005592107773
iterations: 8 error cos: 6.186962128e-05 error sin: 0.0004280209541
iterations: 9 error cos: 4.887580872e-05 error sin: 0.0003381371498
iterations: 10 error cos: 3.951787949e-05 error sin: 0.0002738237381
iterations: 11 error cos: 3.272294998e-05 error sin: 0.0002263188362
iterations: 12 error cos: 2.747774124e-05 error sin: 0.0001901388168
iterations: 13 error cos: 2.34246254e-05 error sin: 0.0001619458199
iterations: 14 error cos: 2.020597458e-05 error sin: 0.0001397132874
iterations: 15 error cos: 1.758337021e-05 error sin: 0.00012165308
iterations: 16 error cos: 1.5437603e-05 error sin: 0.0001069903374
angle: 10 * pi / 16
iterations: 1 error cos: 0.006275594234 error sin: 0.03990274668
iterations: 2 error cos: 0.001507222652 error sin: 0.009385168552
iterations: 3 error cos: 0.000665128231 error sin: 0.004126191139
iterations: 4 error cos: 0.0003731250763 error sin: 0.002312302589
iterations: 5 error cos: 0.0002385377884 error sin: 0.001477301121
iterations: 6 error cos: 0.0001655220985 error sin: 0.001024961472
iterations: 7 error cos: 0.0001215338707 error sin: 0.0007526278496
iterations: 8 error cos: 9.310245514e-05 error sin: 0.0005759596825
iterations: 9 error cos: 7.349252701e-05 error sin: 0.0004550218582
iterations: 10 error cos: 5.960464478e-05 error sin: 0.0003685355186
iterations: 11 error cos: 4.917383194e-05 error sin: 0.0003045201302
iterations: 12 error cos: 4.130601883e-05 error sin: 0.0002558231354
iterations: 13 error cos: 3.528594971e-05 error sin: 0.0002179741859
iterations: 14 error cos: 3.039836884e-05 error sin: 0.000187933445
iterations: 15 error cos: 2.652406693e-05 error sin: 0.0001637339592
iterations: 16 error cos: 2.330541611e-05 error sin: 0.0001438856125
angle: 11 * pi / 16
iterations: 1 error cos: 0.009163081646 error sin: 0.05289292336
iterations: 2 error cos: 0.002181708813 error sin: 0.01227402687
iterations: 3 error cos: 0.0009613037109 error sin: 0.005384087563
iterations: 4 error cos: 0.000539124012 error sin: 0.003014802933
iterations: 5 error cos: 0.0003445744514 error sin: 0.001925468445
iterations: 6 error cos: 0.0002391338348 error sin: 0.00133562088
iterations: 7 error cos: 0.0001756548882 error sin: 0.0009805560112
iterations: 8 error cos: 0.0001343488693 error sin: 0.0007504224777
iterations: 9 error cos: 0.000106215477 error sin: 0.0005927681923
iterations: 10 error cos: 8.600950241e-05 error sin: 0.0004799962044
iterations: 11 error cos: 7.110834122e-05 error sin: 0.000396668911
iterations: 12 error cos: 5.966424942e-05 error sin: 0.0003333091736
iterations: 13 error cos: 5.090236664e-05 error sin: 0.0002838969231
iterations: 14 error cos: 4.374980927e-05 error sin: 0.0002448558807
iterations: 15 error cos: 3.826618195e-05 error sin: 0.0002132058144
iterations: 16 error cos: 3.349781036e-05 error sin: 0.0001873970032
angle: 12 * pi / 16
iterations: 1 error cos: 0.01293885708 error sin: 0.06836122274
iterations: 2 error cos: 0.003051161766 error sin: 0.01562684774
iterations: 3 error cos: 0.001342177391 error sin: 0.006837785244
iterations: 4 error cos: 0.0007522702217 error sin: 0.003825545311
iterations: 5 error cos: 0.0004805922508 error sin: 0.002442359924
iterations: 6 error cos: 0.0003334879875 error sin: 0.001693725586
iterations: 7 error cos: 0.0002447962761 error sin: 0.00124335289
iterations: 8 error cos: 0.0001873373985 error sin: 0.0009514689445
iterations: 9 error cos: 0.0001480579376 error sin: 0.0007514953613
iterations: 10 error cos: 0.0001199245453 error sin: 0.0006085038185
iterations: 11 error cos: 9.900331497e-05 error sin: 0.0005029439926
iterations: 12 error cos: 8.33272934e-05 error sin: 0.0004224777222
iterations: 13 error cos: 7.086992264e-05 error sin: 0.0003599524498
iterations: 14 error cos: 6.109476089e-05 error sin: 0.0003103613853
iterations: 15 error cos: 5.322694778e-05 error sin: 0.0002702474594
iterations: 16 error cos: 4.684925079e-05 error sin: 0.0002375245094
angle: 13 * pi / 16
iterations: 1 error cos: 0.01776367426 error sin: 0.08649134636
iterations: 2 error cos: 0.004144728184 error sin: 0.01944422722
iterations: 3 error cos: 0.001820087433 error sin: 0.008485257626
iterations: 4 error cos: 0.001019477844 error sin: 0.004742920399
iterations: 5 error cos: 0.0006512403488 error sin: 0.003026664257
iterations: 6 error cos: 0.000451862812 error sin: 0.002098560333
iterations: 7 error cos: 0.0003315806389 error sin: 0.001540362835
iterations: 8 error cos: 0.0002538561821 error sin: 0.001178622246
iterations: 9 error cos: 0.000200510025 error sin: 0.0009308457375
iterations: 10 error cos: 0.000162422657 error sin: 0.0007537603378
iterations: 11 error cos: 0.0001341700554 error sin: 0.0006227493286
iterations: 12 error cos: 0.0001128315926 error sin: 0.0005232095718
iterations: 13 error cos: 9.608268738e-05 error sin: 0.0004457831383
iterations: 14 error cos: 8.279085159e-05 error sin: 0.0003842711449
iterations: 15 error cos: 7.212162018e-05 error sin: 0.0003347992897
iterations: 16 error cos: 6.330013275e-05 error sin: 0.0002942681313
angle: 14 * pi / 16
iterations: 1 error cos: 0.02380937338 error sin: 0.1074565053
iterations: 2 error cos: 0.005491197109 error sin: 0.02371627092
iterations: 3 error cos: 0.002406716347 error sin: 0.01031953096
iterations: 4 error cos: 0.001347303391 error sin: 0.005762577057
iterations: 5 error cos: 0.0008603334427 error sin: 0.003675639629
iterations: 6 error cos: 0.0005967617035 error sin: 0.00254791975
iterations: 7 error cos: 0.0004380941391 error sin: 0.001869916916
iterations: 8 error cos: 0.0003352761269 error sin: 0.001430630684
iterations: 9 error cos: 0.000264942646 error sin: 0.001129806042
iterations: 10 error cos: 0.0002144575119 error sin: 0.000914812088
iterations: 11 error cos: 0.0001771450043 error sin: 0.0007558465004
iterations: 12 error cos: 0.0001487731934 error sin: 0.0006350874901
iterations: 13 error cos: 0.0001268386841 error sin: 0.0005410313606
iterations: 14 error cos: 0.0001094341278 error sin: 0.0004664063454
iterations: 15 error cos: 9.524822235e-05 error sin: 0.0004062652588
iterations: 16 error cos: 8.374452591e-05 error sin: 0.0003569722176
angle: 15 * pi / 16
iterations: 1 error cos: 0.03125822544 error sin: 0.1314188838
iterations: 2 error cos: 0.007118344307 error sin: 0.02842205763
iterations: 3 error cos: 0.003113627434 error sin: 0.01232880354
iterations: 4 error cos: 0.001741826534 error sin: 0.006877303123
iterations: 5 error cos: 0.001111924648 error sin: 0.004384636879
iterations: 6 error cos: 0.0007711052895 error sin: 0.003038585186
iterations: 7 error cos: 0.0005660653114 error sin: 0.002229571342
iterations: 8 error cos: 0.0004332065582 error sin: 0.001705765724
iterations: 9 error cos: 0.0003421902657 error sin: 0.001346945763
iterations: 10 error cos: 0.0002770423889 error sin: 0.001090586185
iterations: 11 error cos: 0.0002289414406 error sin: 0.0009011030197
iterations: 12 error cos: 0.0001923441887 error sin: 0.000756919384
iterations: 13 error cos: 0.0001638531685 error sin: 0.0006448030472
iterations: 14 error cos: 0.0001413226128 error sin: 0.0005558729172
iterations: 15 error cos: 0.0001232028008 error sin: 0.0004842281342
iterations: 16 error cos: 0.0001082420349 error sin: 0.0004254579544
angle: 16 * pi / 16
iterations: 1 error cos: 0.04030227661 error sin: 0.1585290432
iterations: 2 error cos: 0.009052276611 error sin: 0.0335290432
iterations: 3 error cos: 0.003951132298 error sin: 0.01449614763
iterations: 4 error cos: 0.002208709717 error sin: 0.008077383041
iterations: 5 error cos: 0.001409590244 error sin: 0.0051471591
iterations: 6 error cos: 0.0009772777557 error sin: 0.003566026688
iterations: 7 error cos: 0.0007173418999 error sin: 0.002616286278
iterations: 8 error cos: 0.0005488991737 error sin: 0.002001285553
iterations: 9 error cos: 0.0004335045815 error sin: 0.001580238342
iterations: 10 error cos: 0.0003510117531 error sin: 0.0012794137
iterations: 11 error cos: 0.0002900958061 error sin: 0.001057088375
iterations: 12 error cos: 0.0002437829971 error sin: 0.0008879899979
iterations: 13 error cos: 0.0002076029778 error sin: 0.0007564425468
iterations: 14 error cos: 0.000178873539 error sin: 0.0006522536278
iterations: 15 error cos: 0.0001559257507 error sin: 0.0005682110786
iterations: 16 error cos: 0.000137090683 error sin: 0.0004991889
Code: Select all
#include <fstream>
#include <stdlib.h>
#include <windows.h>
#include "math.h"
#include <iostream>
using namespace std;
ofstream out;
const float pi = 3.1415926535897932384626433832795f;
#include "iomanip.h" // necessary for setprecision
int main()
{
out.open("circosc.txt");
for(int i = 1; i <= 16; i++) {
float w = (float)i * .0625f;
out << "angle: " << i << " * pi / 16" << "\r\n";
float cosw = cos(w);
float sinw = sin(w);
for (int j = 1; j < 17; j++) {
float wit = w / (float)j;
float s0 = 1.f;
float s1 = wit;
for (int k = 1; k < j; k++) {s0 -= wit * s1; s1 += wit * s0;}
s0 = .5f * (s0 + s0 - wit * s1);
out << setprecision(10) << "\titerations: " << j << "\terror cos: " << fabs(cosw - s0) << "\terror sin: " << fabs(sinw - s1) << "\r\n";
}
out << "\r\n";
}
out.close();
return 0;
}
xoxos


