Уголок коптер-программиста

mahowik

для косинуса картинка еще лучше… практически стабильные 3 знака после запятой…

angle=-180, _cos=-1.0, cos=-0.9999999999999962
angle=-179, _cos=-0.9998488, cos=-0.9998476942464143
angle=-178, _cos=-0.99939513, cos=-0.9993908286494242
angle=-177, _cos=-0.99863917, cos=-0.9986295298952702
angle=-176, _cos=-0.9975812, cos=-0.9975640506788648
angle=-175, _cos=-0.99622136, cos=-0.9961947072311165
angle=-174, _cos=-0.99456006, cos=-0.9945218917410721
angle=-173, _cos=-0.9925978, cos=-0.9925461594598222
angle=-172, _cos=-0.99033517, cos=-0.9902680582467471
angle=-171, _cos=-0.9877726, cos=-0.9876883442630557
angle=-170, _cos=-0.9849109, cos=-0.9848077328488366
angle=-169, _cos=-0.98175097, cos=-0.9816271801541483
angle=-168, _cos=-0.9782936, cos=-0.9781476176982725
angle=-167, _cos=-0.97453946, cos=-0.9743700517451377
angle=-166, _cos=-0.97049, cos=-0.9702957361674079
angle=-165, _cos=-0.966146, cos=-0.9659258007497356
angle=-164, _cos=-0.961509, cos=-0.9612616959876598
angle=-163, _cos=-0.9565799, cos=-0.9563047849178868
angle=-162, _cos=-0.9513603, cos=-0.9510565037710687
angle=-161, _cos=-0.9458515, cos=-0.9455185945886003
angle=-160, _cos=-0.94005513, cos=-0.939692593001358
angle=-159, _cos=-0.9339728, cos=-0.9335804328112187
angle=-158, _cos=-0.92760617, cos=-0.9271838981987857
angle=-157, _cos=-0.92095685, cos=-0.9205048444308557
angle=-156, _cos=-0.91402704, cos=-0.9135454884595733
angle=-155, _cos=-0.90681833, cos=-0.906307760074965
angle=-154, _cos=-0.89933294, cos=-0.8987940616678518
angle=-153, _cos=-0.89157283, cos=-0.8910064767442805
angle=-152, _cos=-0.8835404, cos=-0.8829475902067981
angle=-151, _cos=-0.87523764, cos=-0.8746197523266611
angle=-150, _cos=-0.86666703, cos=-0.8660253806059512
angle=-149, _cos=-0.85783106, cos=-0.8571673277407961
angle=-148, _cos=-0.8487321, cos=-0.8480480500191255
angle=-147, _cos=-0.839373, cos=-0.8386705743670589
angle=-146, _cos=-0.8297561, cos=-0.8290376344275047
angle=-145, _cos=-0.8198843, cos=-0.819152027702785
angle=-144, _cos=-0.8097606, cos=-0.809017035483602
angle=-143, _cos=-0.79938745, cos=-0.7986354681459424
angle=-142, _cos=-0.7887684, cos=-0.7880107716027712
angle=-141, _cos=-0.77790624, cos=-0.7771458920223127
angle=-140, _cos=-0.76680434, cos=-0.7660444357414705
angle=-139, _cos=-0.7554658, cos=-0.7547096375479136
angle=-138, _cos=-0.7438938, cos=-0.7431447905587066
angle=-137, _cos=-0.7320921, cos=-0.731353733448193
angle=-136, _cos=-0.7200638, cos=-0.7193397358097812
angle=-135, _cos=-0.707813, cos=-0.7071067854026294
angle=-134, _cos=-0.6953431, cos=-0.6946584458586323
angle=-133, _cos=-0.6826574, cos=-0.681998334651355
angle=-132, _cos=-0.6697606, cos=-0.6691306540019003
angle=-131, _cos=-0.65665585, cos=-0.6560589720452918
angle=-130, _cos=-0.64334756, cos=-0.6427876276136986
angle=-129, _cos=-0.6298397, cos=-0.6293203007758262
angle=-128, _cos=-0.6161365, cos=-0.6156614616886991
angle=-127, _cos=-0.602242, cos=-0.6018150882806468
angle=-126, _cos=-0.5881605, cos=-0.5877852053586913
angle=-125, _cos=-0.5738969, cos=-0.5735764698068935
angle=-124, _cos=-0.5594549, cos=-0.5591928216272118
angle=-123, _cos=-0.54483974, cos=-0.5446390351276227
angle=-122, _cos=-0.530056, cos=-0.5299193481811844
angle=-121, _cos=-0.51510775, cos=-0.5150380401317427
angle=-120, _cos=-0.50000066, cos=-0.5000000504735647
angle=-119, _cos=-0.48473898, cos=-0.48480954915607954
angle=-118, _cos=-0.46932822, cos=-0.469471578302864
angle=-117, _cos=-0.45377323, cos=-0.4539906034789449
angle=-116, _cos=-0.4380788, cos=-0.4383711259966142
angle=-115, _cos=-0.42225078, cos=-0.42261833036782626
angle=-114, _cos=-0.406294, cos=-0.40673669365676585
angle=-113, _cos=-0.39021397, cos=-0.39073116071970493
angle=-112, _cos=-0.37401626, cos=-0.3746066070083963
angle=-111, _cos=-0.35770637, cos=-0.35836794422955826
angle=-110, _cos=-0.34128994, cos=-0.34202011884871736
angle=-109, _cos=-0.32477286, cos=-0.32556811058346385
angle=-108, _cos=-0.3081606, cos=-0.30901704426134974
angle=-107, _cos=-0.2914592, cos=-0.2923717354199002
angle=-106, _cos=-0.27467465, cos=-0.27563736710785786
angle=-105, _cos=-0.25781316, cos=-0.25881903678780893
angle=-104, _cos=-0.24088049, cos=-0.2419218674980403
angle=-103, _cos=-0.22388309, cos=-0.22495100629200873
angle=-102, _cos=-0.20682737, cos=-0.20791173927477583
angle=-101, _cos=-0.1897194, cos=-0.19080902402599992
angle=-100, _cos=-0.17256577, cos=-0.173648186364537
angle=-99, _cos=-0.15537308, cos=-0.15643445365997144
angle=-98, _cos=-0.13814792, cos=-0.13917306939426774
angle=-97, _cos=-0.120896995, cos=-0.1218692915645513
angle=-96, _cos=-0.10362731, cos=-0.10452850963771676
angle=-95, _cos=-0.08634533, cos=-0.08715576891927246
angle=-94, _cos=-0.06905822, cos=-0.0697564796473987
angle=-93, _cos=-0.051773004, cos=-0.05233594182651971
angle=-92, _cos=-0.03449681, cos=-0.034899461933588664
angle=-91, _cos=-0.017236838, cos=-0.017452351301679672
angle=-90, _cos=-5.543232E-7, cos=-4.371139000186241E-8
angle=-89, _cos=0.017235914, cos=0.017452383083348
angle=-88, _cos=0.034495886, cos=0.03489949370073475
angle=-87, _cos=0.051771987, cos=0.05233597356946695
angle=-86, _cos=0.0690572, cos=0.06975651135647787
angle=-85, _cos=0.08634432, cos=0.08715580058482462
angle=-84, _cos=0.10362611, cos=0.10452842269384792
angle=-83, _cos=0.12089599, cos=0.12186932311412917
angle=-82, _cos=0.1381469, cos=0.13917310087143323
angle=-81, _cos=0.15537207, cos=0.1564344850551363
angle=-80, _cos=0.17256477, cos=0.1736482176681379
angle=-79, _cos=0.18971822, cos=0.19080893820942238
angle=-78, _cos=0.2068262, cos=0.20791165376239343
angle=-77, _cos=0.22388208, cos=0.22495103726383234
angle=-76, _cos=0.24087942, cos=0.24192189834035474
angle=-75, _cos=0.25781208, cos=0.25881906749121936
angle=-74, _cos=0.27467373, cos=0.2756373976630117
angle=-73, _cos=0.29145822, cos=0.29237165181707964
angle=-72, _cos=0.30815953, cos=0.3090169611173454
angle=-71, _cos=0.3247718, cos=0.3255681406381994
angle=-70, _cos=0.34128907, cos=0.3420201487182659
angle=-69, _cos=0.3577055, cos=0.3583679739048213
angle=-68, _cos=0.3740154, cos=0.37460663648033443
angle=-67, _cos=0.39021292, cos=0.39073108024661135
angle=-66, _cos=0.40629297, cos=0.4067366137920827
angle=-65, _cos=0.42224976, cos=0.42261825113588114
angle=-64, _cos=0.43807787, cos=0.43837115456613984
angle=-63, _cos=0.45377216, cos=0.4539905255846804
angle=-62, _cos=0.46932733, cos=0.4694716063686856
angle=-61, _cos=0.48473802, cos=0.48480957695718824
angle=-60, _cos=0.49999964, cos=0.499999974763217
angle=-59, _cos=0.5151069, cos=0.5150380673780998
angle=-58, _cos=0.5300549, cos=0.5299192740424647
angle=-57, _cos=0.5448388, cos=0.5446390117973712
angle=-56, _cos=0.559454, cos=0.5591928973939153
angle=-55, _cos=0.57389593, cos=0.5735764470196116
angle=-54, _cos=0.58815974, cos=0.5877852310745185
angle=-53, _cos=0.60224116, cos=0.6018150184617123
angle=-52, _cos=0.61613566, cos=0.6156614867368104
angle=-51, _cos=0.6298389, cos=0.6293203718000968
angle=-50, _cos=0.6433468, cos=0.6427876063037709
angle=-49, _cos=0.65665513, cos=0.6560590410190733
angle=-48, _cos=0.6697597, cos=0.6691305890341149
angle=-47, _cos=0.68265676, cos=0.6819983578985368
angle=-46, _cos=0.6953423, cos=0.6946583829719509
angle=-45, _cos=0.70781225, cos=0.7071067657322372
angle=-44, _cos=0.72006327, cos=0.7193397992954146
angle=-43, _cos=0.7320913, cos=0.731353714476271
angle=-42, _cos=0.7438932, cos=0.7431448118280339
angle=-41, _cos=0.7554651, cos=0.7547095801934123
angle=-40, _cos=0.7668037, cos=0.7660444561734449
angle=-39, _cos=0.77790564, cos=0.7771459495366342
angle=-38, _cos=0.78876776, cos=0.7880107544762174
angle=-37, _cos=0.7993869, cos=0.7986355231465139
angle=-36, _cos=0.8097599, cos=0.8090169840977831
angle=-35, _cos=0.81988376, cos=0.8191520459347782
angle=-34, _cos=0.8297555, cos=0.8290375855413114
angle=-33, _cos=0.83937234, cos=0.8386705592162165
angle=-32, _cos=0.8487317, cos=0.8480480984490619
angle=-31, _cos=0.8578306, cos=0.8571673134133982
angle=-30, _cos=0.8666665, cos=0.8660253964992068
angle=-29, _cos=0.87523717, cos=0.8746197099432601
angle=-28, _cos=0.88353986, cos=0.8829475911383176
angle=-27, _cos=0.8915725, cos=0.8910065182350011
angle=-26, _cos=0.8993324, cos=0.8987940494731845
angle=-25, _cos=0.90681785, cos=0.9063077861035319
angle=-24, _cos=0.9140266, cos=0.9135454529015278
angle=-23, _cos=0.92095655, cos=0.9205048568508346
angle=-22, _cos=0.92760575, cos=0.9271838542854957
angle=-21, _cos=0.9339724, cos=0.9335804228420908
angle=-20, _cos=0.94005483, cos=0.9396926242589767
angle=-19, _cos=0.94585115, cos=0.945518575829216
angle=-18, _cos=0.9513599, cos=0.9510565135936411
angle=-17, _cos=0.95657957, cos=0.9563047593579442
angle=-16, _cos=0.9615087, cos=0.9612616965345758
angle=-15, _cos=0.9661458, cos=0.9659258244035116
angle=-14, _cos=0.97048974, cos=0.9702957258326756
angle=-13, _cos=0.9745393, cos=0.974370065599612
angle=-12, _cos=0.97829324, cos=0.9781475995220578
angle=-11, _cos=0.9817507, cos=0.9816271833760248
angle=-10, _cos=0.9849108, cos=0.9848077538938695
angle=-9, _cos=0.98777246, cos=0.987688339911341
angle=-8, _cos=0.990335, cos=0.9902680688920995
angle=-7, _cos=0.9925977, cos=0.9925461515296595
angle=-6, _cos=0.99455994, cos=0.9945218950636677
angle=-5, _cos=0.9962212, cos=0.9961946983130029
angle=-4, _cos=0.9975811, cos=0.9975640502975485
angle=-3, _cos=0.99863917, cos=0.9986295346783179
angle=-2, _cos=0.99939513, cos=0.9993908270285325
angle=-1, _cos=0.9998488, cos=0.9998476951587508
angle=0, _cos=1.0, cos=1.0
angle=1, _cos=0.99984866, cos=0.9998476951587508
angle=2, _cos=0.999395, cos=0.9993908270285325
angle=3, _cos=0.9986391, cos=0.9986295346783179
angle=4, _cos=0.9975811, cos=0.9975640502975485
angle=5, _cos=0.9962212, cos=0.9961946983130029
angle=6, _cos=0.99455994, cos=0.9945218950636677
angle=7, _cos=0.9925977, cos=0.9925461515296595
angle=8, _cos=0.9903351, cos=0.9902680688920995
angle=9, _cos=0.98777246, cos=0.987688339911341
angle=10, _cos=0.9849108, cos=0.9848077538938695
angle=11, _cos=0.98175085, cos=0.9816271833760248
angle=12, _cos=0.97829324, cos=0.9781475995220578
angle=13, _cos=0.9745392, cos=0.974370065599612
angle=14, _cos=0.9704897, cos=0.9702957258326756
angle=15, _cos=0.9661458, cos=0.9659258244035116
angle=16, _cos=0.9615086, cos=0.9612616965345758
angle=17, _cos=0.9565796, cos=0.9563047593579442
angle=18, _cos=0.95136005, cos=0.9510565135936411
angle=19, _cos=0.94585115, cos=0.945518575829216
angle=20, _cos=0.9400548, cos=0.9396926242589767
angle=21, _cos=0.93397236, cos=0.9335804228420908
angle=22, _cos=0.9276058, cos=0.9271838542854957
angle=23, _cos=0.92095655, cos=0.9205048568508346
angle=24, _cos=0.91402656, cos=0.9135454529015278
angle=25, _cos=0.90681785, cos=0.9063077861035319
angle=26, _cos=0.8993324, cos=0.8987940494731845
angle=27, _cos=0.8915725, cos=0.8910065182350011
angle=28, _cos=0.88353986, cos=0.8829475911383176
angle=29, _cos=0.87523717, cos=0.8746197099432601
angle=30, _cos=0.86666656, cos=0.8660253964992068
angle=31, _cos=0.85783064, cos=0.8571673134133982
angle=32, _cos=0.8487317, cos=0.8480480984490619
angle=33, _cos=0.8393723, cos=0.8386705592162165
angle=34, _cos=0.82975554, cos=0.8290375855413114
angle=35, _cos=0.81988364, cos=0.8191520459347782
angle=36, _cos=0.8097599, cos=0.8090169840977831
angle=37, _cos=0.7993869, cos=0.7986355231465139
angle=38, _cos=0.78876776, cos=0.7880107544762174
angle=39, _cos=0.7779055, cos=0.7771459495366342
angle=40, _cos=0.7668037, cos=0.7660444561734449
angle=41, _cos=0.7554651, cos=0.7547095801934123
angle=42, _cos=0.7438931, cos=0.7431448118280339
angle=43, _cos=0.73209137, cos=0.731353714476271
angle=44, _cos=0.72006327, cos=0.7193397992954146
angle=45, _cos=0.7078122, cos=0.7071067657322372
angle=46, _cos=0.6953422, cos=0.6946583829719509
angle=47, _cos=0.6826567, cos=0.6819983578985368
angle=48, _cos=0.6697598, cos=0.6691305890341149
angle=49, _cos=0.6566552, cos=0.6560590410190733
angle=50, _cos=0.6433466, cos=0.6427876063037709
angle=51, _cos=0.62983906, cos=0.6293203718000968
angle=52, _cos=0.6161355, cos=0.6156614867368104
angle=53, _cos=0.60224116, cos=0.6018150184617123
angle=54, _cos=0.5881598, cos=0.5877852310745185
angle=55, _cos=0.573896, cos=0.5735764470196116
angle=56, _cos=0.559454, cos=0.5591928973939153
angle=57, _cos=0.5448389, cos=0.5446390117973712
angle=58, _cos=0.53005487, cos=0.5299192740424647
angle=59, _cos=0.515107, cos=0.5150380673780998
angle=60, _cos=0.49999952, cos=0.499999974763217
angle=61, _cos=0.48473817, cos=0.48480957695718824
angle=62, _cos=0.4693274, cos=0.4694716063686856
angle=63, _cos=0.453772, cos=0.4539905255846804
angle=64, _cos=0.43807787, cos=0.43837115456613984
angle=65, _cos=0.42224976, cos=0.42261825113588114
angle=66, _cos=0.40629297, cos=0.4067366137920827
angle=67, _cos=0.3902129, cos=0.39073108024661135
angle=68, _cos=0.37401545, cos=0.37460663648033443
angle=69, _cos=0.35770553, cos=0.3583679739048213
angle=70, _cos=0.34128898, cos=0.3420201487182659
angle=71, _cos=0.32477176, cos=0.3255681406381994
angle=72, _cos=0.30815944, cos=0.3090169611173454
angle=73, _cos=0.29145816, cos=0.29237165181707964
angle=74, _cos=0.27467382, cos=0.2756373976630117
angle=75, _cos=0.25781208, cos=0.25881906749121936
angle=76, _cos=0.2408795, cos=0.24192189834035474
angle=77, _cos=0.22388208, cos=0.22495103726383234
angle=78, _cos=0.2068261, cos=0.20791165376239343
angle=79, _cos=0.18971837, cos=0.19080893820942238
angle=80, _cos=0.17256494, cos=0.1736482176681379
angle=81, _cos=0.15537193, cos=0.1564344850551363
angle=82, _cos=0.138147, cos=0.13917310087143323
angle=83, _cos=0.12089583, cos=0.12186932311412917
angle=84, _cos=0.10362623, cos=0.10452842269384792
angle=85, _cos=0.08634446, cos=0.08715580058482462
angle=86, _cos=0.069057085, cos=0.06975651135647787
angle=87, _cos=0.05177213, cos=0.05233597356946695
angle=88, _cos=0.034495924, cos=0.03489949370073475
angle=89, _cos=0.017235871, cos=0.017452383083348
angle=90, _cos=-7.390978E-7, cos=-4.371139000186241E-8
angle=91, _cos=-0.01723662, cos=-0.017452351301679672
angle=92, _cos=-0.03449687, cos=-0.034899461933588664
angle=93, _cos=-0.05177328, cos=-0.05233594182651971
angle=94, _cos=-0.06905825, cos=-0.0697564796473987
angle=95, _cos=-0.08634505, cos=-0.08715576891927246
angle=96, _cos=-0.10362723, cos=-0.10452850963771676
angle=97, _cos=-0.12089703, cos=-0.1218692915645513
angle=98, _cos=-0.1381478, cos=-0.13917306939426774
angle=99, _cos=-0.15537316, cos=-0.15643445365997144
angle=100, _cos=-0.17256598, cos=-0.173648186364537
angle=101, _cos=-0.18971942, cos=-0.19080902402599992
angle=102, _cos=-0.20682715, cos=-0.20791173927477583
angle=103, _cos=-0.22388336, cos=-0.22495100629200873
angle=104, _cos=-0.24088056, cos=-0.2419218674980403
angle=105, _cos=-0.25781295, cos=-0.25881903678780893
angle=106, _cos=-0.27467492, cos=-0.27563736710785786
angle=107, _cos=-0.29145926, cos=-0.2923717354199002
angle=108, _cos=-0.30816033, cos=-0.30901704426134974
angle=109, _cos=-0.3247729, cos=-0.32556811058346385
angle=110, _cos=-0.34128988, cos=-0.34202011884871736
angle=111, _cos=-0.3577062, cos=-0.35836794422955826
angle=112, _cos=-0.37401637, cos=-0.3746066070083963
angle=113, _cos=-0.3902143, cos=-0.39073116071970493
angle=114, _cos=-0.4062939, cos=-0.40673669365676585
angle=115, _cos=-0.4222507, cos=-0.42261833036782626
angle=116, _cos=-0.43807906, cos=-0.4383711259966142
angle=117, _cos=-0.45377344, cos=-0.4539906034789449
angle=118, _cos=-0.46932814, cos=-0.469471578302864
angle=119, _cos=-0.48473912, cos=-0.48480954915607954
angle=120, _cos=-0.5000008, cos=-0.5000000504735647
angle=121, _cos=-0.5151077, cos=-0.5150380401317427
angle=122, _cos=-0.5300558, cos=-0.5299193481811844
angle=123, _cos=-0.54483986, cos=-0.5446390351276227
angle=124, _cos=-0.5594548, cos=-0.5591928216272118
angle=125, _cos=-0.57389677, cos=-0.5735764698068935
angle=126, _cos=-0.5881606, cos=-0.5877852053586913
angle=127, _cos=-0.60224193, cos=-0.6018150882806468
angle=128, _cos=-0.61613625, cos=-0.6156614616886991
angle=129, _cos=-0.62983984, cos=-0.6293203007758262
angle=130, _cos=-0.6433476, cos=-0.6427876276136986
angle=131, _cos=-0.6566557, cos=-0.6560589720452918
angle=132, _cos=-0.66976064, cos=-0.6691306540019003
angle=133, _cos=-0.68265754, cos=-0.681998334651355
angle=134, _cos=-0.695343, cos=-0.6946584458586323
angle=135, _cos=-0.707813, cos=-0.7071067854026294
angle=136, _cos=-0.7200638, cos=-0.7193397358097812
angle=137, _cos=-0.7320922, cos=-0.731353733448193
angle=138, _cos=-0.7438939, cos=-0.7431447905587066
angle=139, _cos=-0.75546587, cos=-0.7547096375479136
angle=140, _cos=-0.7668042, cos=-0.7660444357414705
angle=141, _cos=-0.7779061, cos=-0.7771458920223127
angle=142, _cos=-0.7887686, cos=-0.7880107716027712
angle=143, _cos=-0.79938745, cos=-0.7986354681459424
angle=144, _cos=-0.8097606, cos=-0.809017035483602
angle=145, _cos=-0.8198843, cos=-0.819152027702785
angle=146, _cos=-0.82975614, cos=-0.8290376344275047
angle=147, _cos=-0.839373, cos=-0.8386705743670589
angle=148, _cos=-0.8487321, cos=-0.8480480500191255
angle=149, _cos=-0.8578312, cos=-0.8571673277407961
angle=150, _cos=-0.86666715, cos=-0.8660253806059512
angle=151, _cos=-0.8752375, cos=-0.8746197523266611
angle=152, _cos=-0.8835404, cos=-0.8829475902067981
angle=153, _cos=-0.89157283, cos=-0.8910064767442805
angle=154, _cos=-0.8993329, cos=-0.8987940616678518
angle=155, _cos=-0.9068184, cos=-0.906307760074965
angle=156, _cos=-0.91402715, cos=-0.9135454884595733
angle=157, _cos=-0.9209568, cos=-0.9205048444308557
angle=158, _cos=-0.9276061, cos=-0.9271838981987857
angle=159, _cos=-0.9339729, cos=-0.9335804328112187
angle=160, _cos=-0.940055, cos=-0.939692593001358
angle=161, _cos=-0.94585145, cos=-0.9455185945886003
angle=162, _cos=-0.95136034, cos=-0.9510565037710687
angle=163, _cos=-0.9565799, cos=-0.9563047849178868
angle=164, _cos=-0.9615089, cos=-0.9612616959876598
angle=165, _cos=-0.9661461, cos=-0.9659258007497356
angle=166, _cos=-0.97049, cos=-0.9702957361674079
angle=167, _cos=-0.97453946, cos=-0.9743700517451377
angle=168, _cos=-0.9782936, cos=-0.9781476176982725
angle=169, _cos=-0.98175097, cos=-0.9816271801541483
angle=170, _cos=-0.9849109, cos=-0.9848077328488366
angle=171, _cos=-0.9877726, cos=-0.9876883442630557
angle=172, _cos=-0.9903352, cos=-0.9902680582467471
angle=173, _cos=-0.9925978, cos=-0.9925461594598222
angle=174, _cos=-0.99456006, cos=-0.9945218917410721
angle=175, _cos=-0.99622136, cos=-0.9961947072311165
angle=176, _cos=-0.9975811, cos=-0.9975640506788648
angle=177, _cos=-0.9986393, cos=-0.9986295298952702
angle=178, _cos=-0.9993952, cos=-0.9993908286494242
angle=179, _cos=-0.99984884, cos=-0.9998476942464143
angle=180, _cos=-1.0, cos=-0.9999999999999962
Gene
mahowik:

корректно работает только в диапазоне -180…180, т.е. надо приводить к этому диапазону…

каюсь. я специально вырезал приведение к диапазону, ибо для моих задач (подвес) они не нужны… Ибо если подвес, а с ним и коптер, вышел из диапазона -180…180, задача стабилизации – как бы это помягче сказать – отходит на второй план 😃

mahowik:

надо будет еще на ардуине прогнать и посмотреть выигрышь в производительности… если хотябы в 2-3 раза, то уже можно будет и матрицы крутить на AVR-ке с частотой 150-200гц…

Александр, расскажите пожалуйста здесь о результатах теста, у меня никах руки не доходят…

mahowik
Gene:

расскажите пожалуйста здесь о результатах теста, у меня никах руки не доходят…

обещаю! 😉

p.s. меня все не покидает идея улучшения качества удержания позиции по гпс с применением акселя 😃, где аксель будет основноый и быстрый сенсор, а гпс лишь корректор…
на AVR-ке конечно же, т.е. на AIOP… и там как раз нужны быстрые sin/cos, чеб привести вектор акселя в глобальную систему координат, т.е. в которой живет гпс…

SergDoc
mahowik:

angle=90, _cos=-7.390978E-7, cos=-4.371139000186241E-8

Саш, чёт с математикой не слишком срослось? я конечно понимаю что нулей впереди до дури но всёже?

mahowik
SergDoc:

чёт с математикой не слишком срослось? я конечно понимаю что нулей впереди до дури но всёже?

mahowik:

для косинуса картинка еще лучше… практически стабильные 3 знака после запятой…

т.е. с точностью до 3-х знаков и там и там ноль ))

  • надо учесть, что еще на входе погрешность, где угол в радианы переводится… т.е. (float)(i*Math.PI/180.0f)
SergDoc

а я как всегда со своей колокольни 😃 ±0 напрягает, можно невзначай и через 180 повернуть? 😃

mahowik
Gene:

Но вообще мне и сейчас кажется, что спокойнее все же посчитать константы самому

глянул… в свежей версии так и сделали…

int16_t _atan2(int32_t y, int32_t x){
  float z = (float)y / x;
  int16_t a;
  if ( abs(y) < abs(x) ){
     a = 573 * z / (1.0f + 0.28f * z * z);
   if (x<0) {
     if (y<0) a -= 1800;
     else a += 1800;
   }
  } else {
   a = 900 - 573 * z / (z * z + 0.28f);
   if (y<0) a -= 1800;
  }
  return a;
}

вот еще в ardu нашел… самый быстрый sin/cos и сразу с углом на входе…

static const uint16_t     pgm_sinLUT[91] PROGMEM = {0, 17, 35, 52, 70, 87, 105, 122, 139, 156, 174, 191, 208, 225, 242, 259, 276, 292, 309, 326, 342, 358, 375, 391, 407, 423, 438, 454, 469, 485, 500, 515, 530, 545, 559, 574, 588, 602, 616, 629, 643, 656, 669, 682, 695, 707, 719, 731, 743, 755, 766, 777, 788, 799, 809, 819, 829, 839, 848, 857, 866, 875, 883, 891, 899, 906, 914, 921, 927, 934, 940, 946, 951, 956, 961, 966, 970, 974, 978, 982, 985, 988, 990, 993, 995, 996, 998, 999, 999, 1000, 1000};

float
Trig_LUT::sin_lut(int16_t angle)
{
    int8_t m,n;
    int16_t _sin;

    if (angle < 0){
        m         = -1;
        angle     = -angle;
    }else{
        m         = 1;
    }

    // 0 - 360 only
    angle %= 360;

    // check quadrant
    if (angle <= 90){
        n = 1; // first quadrant
    } else if ((angle > 90) && (angle <= 180)) {
        angle = 180 - angle;
        n = 1;    // second quadrant
    } else if ((angle > 180) && (angle <= 270)) {
        angle = angle - 180;
        n = -1; // third quadrant
    } else {
        angle = 360 - angle;
        n = -1;
    }         // fourth quadrant

    // get lookup value
    _sin = pgm_read_word(&pgm_sinLUT[angle]);

    // calculate sinus value
    return (float)(_sin * m * n) / 1000;
}

float
Trig_LUT::cos_lut(int16_t angle)
{
    return (sin_lut(90 - angle));
}
mahowik
mahowik:

обещаю!

Написал сегодня тестик. Подрюкался с загадками компиллятора 😃
Если sin/cos считать в цикле и результат функции не присваивать, либо присваивать, но не использовать вне тела цикла, то компиллер считает что “а нах. тогда функцию вообще вызывать” )) Пришлось в цикле контрольную сумму считать…

Результаты:

  1. _sin() быстрее библиотечного sin() на 84%

  2. _cos() быстрее библ. cos() всего на 23%

  3. sin_lut() быстрее библ. sin() на 96%

  4. cos_lut() быстрее библ. cos() на 88%

Таким образом, если точность угла на входе с дискретностью в 1-цу устраивает (а также точность результата три знака после запятой), то табличный sin/cos имеет смысл…

Код теста:

void setup() {
  Serial.begin(115200);
  Serial.println("Start performance test:");
}

static float rad[181];

void loop() {
  uint32_t totalTimeOrig = 0, totalTimeApprox = 0;
  float summ = 0.0f;

  // prepare input data in radians
  for (int i = 0; i <= 180; i++) {
    rad[i] = i*PI/180.0f;
  }

  uint32_t currentTime = micros();
  for (int k = 0; k < 100; k++) {
    for (int i = 0; i <= 180; i++) {
      summ += sin(rad[i]);
      summ += sin(-rad[i]);
    }
  }
  totalTimeOrig = micros() - currentTime;
  Serial.println(summ);

  currentTime = micros();
  for (int k = 0; k < 100; k++) {
    /*for (int i = 0; i <= 180; i++) {
      summ += sin_lut(i);
      summ += sin_lut(-i);
    }*/
    for (int i = 0; i <= 180; i++) {
      summ += _sin(rad[i]);
      summ += _sin(-rad[i]);
    }
  }
  totalTimeApprox = micros() - currentTime;
  Serial.println(summ);

  Serial.print("totalTimeOrig = ");
  Serial.println(totalTimeOrig);
  Serial.print("totalTimeApprox = ");
  Serial.println(totalTimeApprox);
  Serial.print("performance = ");
  Serial.println((float)totalTimeOrig/totalTimeApprox);
  Serial.println();

  delay(2000);
}

float _sin (float x) {
  x = x * 0.31831f;
  float y = x - x * abs(x);
  return y * (3.1f + 3.6f * abs(y));
}

float _cos (float x) {
  x = x * 0.31831f + 0.5f;
  float z = (x + 25165824.0f);
  x = x - (z - 25165824.0f);
  float y = x - x * abs(x);
  return y * (3.1f + 3.6f * abs(y));
}


float _atan( float x )
{
  uint32_t ux_s  = 0x80000000 & (uint32_t &)x;
  float bx_a = ::fabs( 0.596227f * x );
  float num = bx_a + x * x;
  float atan_1q = num / ( 1.f + bx_a + num );
  uint32_t atan_2q = ux_s | (uint32_t &)atan_1q;
  return (float &)atan_2q * 1.5708f;
}


float isqrt( float y )
{
  float x2 = y * 0.5f;
  long i = * ( long * ) &y;    //evil floating point bit level hacking
  i = 0x5f3759df - ( i >> 1 ); //what the fuck?
  y = * ( float * ) &i;
  y = y * ( 1.5f - ( x2 * y * y ) );
  return y;
}

static const uint16_t 	pgm_sinLUT[91] PROGMEM = {
  0, 17, 35, 52, 70, 87, 105, 122, 139, 156, 174, 191, 208, 225, 242, 259, 276, 292, 309, 326, 342, 358, 375, 391, 407, 423, 438, 454, 469, 485, 500, 515, 530, 545, 559, 574, 588, 602, 616, 629, 643, 656, 669, 682, 695, 707, 719, 731, 743, 755, 766, 777, 788, 799, 809, 819, 829, 839, 848, 857, 866, 875, 883, 891, 899, 906, 914, 921, 927, 934, 940, 946, 951, 956, 961, 966, 970, 974, 978, 982, 985, 988, 990, 993, 995, 996, 998, 999, 999, 1000, 1000};

float sin_lut(int16_t angle) {
  int8_t m,n;
  int16_t _sin;

  if (angle < 0){
    m = -1;
    angle = -angle;
  } else{
    m = 1;
  }

  // 0 - 360 only
  angle %= 360;

  // check quadrant
  if (angle <= 90) {
    n = 1; // first quadrant
  }
  else if ((angle > 90) && (angle <= 180)) {
    angle = 180 - angle;
    n = 1;	// second quadrant
  }
  else if ((angle > 180) && (angle <= 270)) {
    angle = angle - 180;
    n = -1; // third quadrant
  }
  else {
    angle = 360 - angle;
    n = -1;
  }		 // fourth quadrant

  // get lookup value
  _sin = pgm_read_word(&pgm_sinLUT[angle]);

  // calculate sinus value
  return (float)(_sin * m * n) / 1000;
}

float cos_lut(int16_t angle) {
  return (sin_lut(90 - angle));
}
Gene

Спасибо, Александр! Очень интересно. Но вот вопросик, ежели надо на входе угол в радианах (конечно и с плавающей точкой), не убьет ли конверсия все преимущество sin_lut по скорости? Я вот так навскидку не вижу, как можно без потерь адаптировать…

А насчет “медленного” _cos – это очевидно сказывается приведение к диапазону, float z = (x + 25165824.0f);
x = x - (z - 25165824.0f); потому что в остальном это тот же _sin со сдвигом.

7 days later
mahowik

Надоел мне совсем ардуиновский IDE для разработки, хотя по сути пользовал его только для компилинга, а писал в Notepad++
Вчера попробовал CodeBlocks-Arduino, может он и ничего, но не смог настроить проект…
Далее глянул MariaMole тоже не понравилась…
Потом решил поставить Visual Studio + Visual Micro pluggin.
Оказалось то что надо! Навигатор удобный как по файлам так и по функциям/перменным, code completion, подсветка синтаксиса с “приглушенным” контентом, если дефайн закрыт… Из минусов Visual Studio запросил гад 5 гб на С диске, также он триальный на 90 дней, НО разработчики Visual Micro пишут что через 90 дней будет доступен Atmel/Visual Studio

Собственно вопрос. Кто на чем пишет под arduino?

mataor
mahowik:

Собственно вопрос. Кто на чем пишет под arduino?

имхо… ардуино ИДЕ - убожество, да и многие другие, по сравнению с атмел студио.
при необходимости достаточно посидеть несколько часов над основными библиотеками ардуино и перетащить их на студию для удобства.

Sir_Alex
mahowik:

Кто на чем пишет под arduino?

UltraEdit )))

На днях прикрутили проект пирата к Eclipse… но по факту получилось только компиляция. Ошибки он не подсвечивает (точнее у него ошибка практически в каждой строке)

mahowik
mataor:

имхо… ардуино ИДЕ - убожество, да и многие другие, по сравнению с атмел студио.
при необходимости достаточно посидеть несколько часов над основными библиотеками ардуино и перетащить их на студию для удобства.

в том и дело Visual Studio + Visual Micro pluggin работает почти из коробки и ниче перетаскивать не надо… показал ей где ардуино фолдэр, открыл главный ino файл и готово!

SergDoc
Sir_Alex:

На днях прикрутили проект пирата к Eclipse…

а можно поподробней? я пытаюсь сейчас AutoQuad32 перетянуть - пока безуспешно (*.ino в *.срр интересно можно просто переименовать, а то гцц может и не понять что за фигня - далее знаю где подключается, так что изменить не проблема), с моими кривыми ручками это надолго - ибо переписываю makefile…

mataor
SergDoc:

*.ino в *.срр

попробуйте основной файл в .cpp а прочие в .h + придется разбиратся с переменными. По крайней мере в атмел студии я именно так и поступал.

SergDoc

у меня он единственный, сейчас компилятор наконец-то увидел (странно патчи прописывал как и раньше, а не пошло- пришлось ближе передвигать - …/…/ ), но ругается что правил для сборки нет, вот и думаю как безболезненно makefile переписать…

Sir_Alex
SergDoc:

а можно поподробней?

Ну суть в том, что у нас есть makefile, который собирает Пирата с использованием Cygwin + Arduino. Т.е. все работает из командной строки.
Теперь создаем “C” проект в Eclipse и подключаем наш makefile. Вот и все. Если сделать Build, то Eclipse подсвечивает ошибки в исходниках, но как только открываешь файлы, он начинает ругаться практически на все, т.к. не может сам проверить исходники. В общем, хоть что то и можно делать, но по сути не сильно отличается от обычного редактора 😦

Вероятно надо менять структуру исходников на нормальный C или C++ и после этого пользоваться любой средой, как Eclipse, так и Atmel…

SergDoc

у мультипилота pde рулит, но там не ардуино, а Cygwin+maple, библиотеки теже…

блин тема моя разрослась - фиг чего найдёшь - в папочке Librares - библиотеки ардупилота…
патчи выглядят так: …\…\…\eclipse;…\…\…\arm\bin;…\…\…\cygwin\bin;…\…\…\openocd\bin;…\…\…\ST-LINK_gdbserver

11 days later
biglev

Уважаемые! Хочу поделиться вопросом, а в перспективе - добиться (не без вашего совета) решения в следущем проекте: Измеритель вибрации (а конкретно амплитуды виброперемещения) по 3 осям с помощью акселерометра ADXL335, Ардуины и 1602 дисплея (для мобильности).
Вопрос: По какому принципу данные с акселерометра в Ардуине пересчитать в мм/с (или, к примеру, создать свою шкалу единиц (0…1000))? Какие формулы использовать?
На ровной поверхности, в состоянии покоя (1g) на выходе каждой оси примерно 330mV. И это напряжение меняется от углов наклона акселерометра.
Хочу мобильное устройство для контроля уровня вибрации двигателей коптера в поле. Телефон и планшет с g-сенсором не предлогать;) Думаю, кто-нибудь сможет найти данному устройству другое применение.

SergDoc

ну дык, если вся шкала АЦП 1024 - 5В если не поизвращатся с Aref проца (напряжение на нём - верхний предел для АЦП - не забыть выставить external) - отсюда и плясать… лучше всего посмотреть в даташит - какое максимальное напряжение на выходе акселя может быть, такое же и выставить Aref…