Skip to content

Commit 3d97500

Browse files
stdlib: Improve sin, cos and tan (^/1/3)
Robust: ^/4 (Does it work for all input values?) Accurate: 1/4 (How accurate is the result?) Well behaved: 3/4 (Does it preserve math properties?) ^ They technically work for all input values. But for very large input, the loss of accuracy makes them practically useless. The result could be severely inaccurate either when the angle is very large, or when the angle is very close to a multiple of pi/2.
1 parent 9149e4a commit 3d97500

File tree

1 file changed

+164
-56
lines changed

1 file changed

+164
-56
lines changed

lib/算經.wy

Lines changed: 164 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -469,42 +469,149 @@
469469
云云。
470470
是謂「析浮點數」之術也。
471471

472+
除「上位冪」以四。名之曰「整除大數限」。
473+
474+
吾有一術。名之曰「取底除」。欲行是術。必先得二數曰「實」。曰「法」。是術曰。
475+
施「正負」於「法」。名之曰「法符」。乘「法」以「法符」。名之曰「法值」。乘「實」以「法符」。名之曰「乙」。
476+
施「正負」於「乙」。名之曰「乙符」。乘「乙」以「乙符」。名之曰「實值」。
477+
除「法值」於「實值」。所餘幾何。名之曰「餘」。
478+
減「餘」於「實值」。除其以「法值」。取一以施「取整」。名之曰「商」。
479+
若「乙符」小於零者。若「餘」不等於零者。
480+
減「商」於負一。昔之「商」者。今其是矣。
481+
減「餘」於「法值」。昔之「餘」者。今其是矣。
482+
云云。云云。
483+
吾有一物。名之曰「商餘」。其物如是。
484+
物之「「商」」者。數曰「商」。
485+
物之「「餘」」者。數曰「餘」。
486+
是謂「商餘」之物也。
487+
乃得「商餘」。
488+
是謂「取底除」之術也。
489+
490+
吾有一術。名之曰「取整除」。欲行是術。必先得二數曰「實」。曰「法」。是術曰。
491+
施「正負」於「法」。名之曰「法符」。乘「法」以「法符」。名之曰「法值」。
492+
施「正負」於「實」。名之曰「實符」。乘「實」以「實符」。名之曰「實值」。
493+
乘「法符」於「實符」名之曰「符」。
494+
除「法值」於「實值」。所餘幾何。名之曰「餘」。
495+
減「餘」於「實值」。除其以「法值」。取一以施「取整」。名之曰「商」。
496+
除「法值」以二。若「餘」不小於其者。
497+
加「商」以一。昔之「商」者。今其是矣。
498+
減「餘」以「法值」。昔之「餘」者。今其是矣。
499+
云云。
500+
乘「商」以「符」。昔之「商」者。今其是矣。
501+
乘「餘」以「符」。昔之「餘」者。今其是矣。
502+
吾有一物。名之曰「商餘」。其物如是。
503+
物之「「商」」者。數曰「商」。
504+
物之「「餘」」者。數曰「餘」。
505+
是謂「商餘」之物也。
506+
乃得「商餘」。
507+
是謂「取整除」之術也。
508+
509+
吾有一列。名之曰「半圓周率密率」。
510+
施「浮點移位」於八八四二七九七一九〇〇三五五五。於負四十九。充「半圓周率密率」以其。
511+
施「浮點移位」於四九六七七五七六〇〇〇二一五一一。於負一百零六。充「半圓周率密率」以其。
512+
513+
吾有一術。名之曰「分四象」。欲行是術。必先得二數曰「甲」。曰「上限」。是術曰。
514+
注曰「「甲須為有限正數。」」
515+
注曰「「術尚不精。當以極密率除之。」」
516+
夫「甲」。夫「半圓周率密率」之一。取二以施「取整除」。名之曰「乙」。
517+
夫「乙」之「「商」」。名之曰「商」。夫「乙」之「「餘」」。名之曰「餘」。
518+
施「絕對」於「商」。若其不小於「整除大數限」者。
519+
有數四。名之曰「移位」。
520+
夫「甲」。減零以「移位」。取二以施「浮點移位」。夫「上限」。取二以施「分四象」。
521+
夫其之「「角」」。夫「移位」。取二以施「浮點移位」。夫「上限」。取二以施「分四象」。乃得矣。
522+
云云。
523+
施「取底除」於「商」。於四。夫其之「「餘」」。名之曰「象」。
524+
夫「半圓周率密率」之二。乘其以「商」。減其於「餘」。昔之「餘」者。今其是矣。
525+
施「絕對」於「餘」。若其大於「上限」者。
526+
施「分四象」於「餘」。於「上限」。名之曰「解」。
527+
夫「解」之「「象」」。加其於「象」。夫四。取二以施「取底除」。
528+
夫其之「「餘」」。昔之「解」之「「象」」者。今其是矣。
529+
乃得「解」。
530+
若非。
531+
吾有一物。名之曰「解」。其物如是。
532+
物之「「角」」者。數曰「餘」。
533+
物之「「象」」者。數曰「象」。
534+
是謂「解」之物也。
535+
乃得「解」。
536+
云云。
537+
是謂「分四象」之術也。
538+
539+
有數七分九釐。名之曰「正餘弦角限」。注曰「「略大於四十五度。」」
540+
541+
吾有一列。名之曰「正弦多項式」。
542+
除負一以六。充「正弦多項式」以其。
543+
除一以一二〇。充「正弦多項式」以其。
544+
除負一以五〇四〇。充「正弦多項式」以其。
545+
除一以三六二八八〇。充「正弦多項式」以其。
546+
除負一以三九九一六八〇〇。充「正弦多項式」以其。
547+
除一以六二二七〇二〇八〇〇。充「正弦多項式」以其。
548+
除負一以一三〇七六七四三六八〇〇〇。充「正弦多項式」以其。
549+
除一以三五五六八七四二八〇九六〇〇〇。充「正弦多項式」以其。
550+
551+
吾有一列。名之曰「餘弦多項式」。
552+
除負一以二。充「餘弦多項式」以其。
553+
除一以二四。充「餘弦多項式」以其。
554+
除負一以七二〇。充「餘弦多項式」以其。
555+
除一以四〇三二〇。充「餘弦多項式」以其。
556+
除負一以三六二八八〇〇。充「餘弦多項式」以其。
557+
除一以四七九〇〇一六〇〇。充「餘弦多項式」以其。
558+
除負一以八七一七八二九一二〇〇。充「餘弦多項式」以其。
559+
除一以二〇九二二七八九八八八〇〇〇。充「餘弦多項式」以其。
560+
472561
注曰「「正弦。同Javascript之Math.sin也。」」
473562
今有一術。名之曰「正弦」。欲行是術。必先得一數曰「甲」。乃行是術曰。
474563
注曰「「數小甚矣。乃得其身。否則以泰勒展開求之。復以週期性得其餘。」」
475564

476-
施「絕對」於「甲」。若其小於零又一絲者。乃得「甲」也。
477-
減零以「半圓周率」。名之曰「負半圓周率」。
478-
479-
若「甲」大於「半圓周率」者。
480-
減「甲」以「圓周率」。取一以施「正弦」。減其於零。乃得矣。
481-
云云。
482-
483-
若「甲」小於「負半圓周率」者。
484-
加「甲」以「圓周率」。取一以施「正弦」。減其於零。乃得矣。
565+
施「絕對」於「甲」。名之曰「乙」。
566+
若「乙」小於「下位冪」者。
567+
乃得「甲」也。
568+
若「乙」小於「正餘弦角限」者。
569+
乘「甲」於「甲」。名之曰「二次冪」。
570+
施「求多項式」於「正弦多項式」。於「二次冪」。乘其以「二次冪」。加其以一。乘其以「甲」。乃得矣。云云。
571+
若「乙」不大於「至巨數」者。
572+
施「分四象」於「甲」。於「正餘弦角限」。名之曰「丙」。
573+
夫「丙」之「「角」」。名之曰「丁」。夫「丙」之「「象」」。名之曰「象」。
574+
乘「丁」於「丁」。名之曰「二次冪」。
575+
若「象」等於零者。
576+
施「求多項式」於「正弦多項式」。於「二次冪」。乘其以「二次冪」。加其於一。乘其以「丁」。乃得矣。云云。
577+
若「象」等於一者。
578+
施「求多項式」於「餘弦多項式」。於「二次冪」。乘其以「二次冪」。加其於一。乃得矣。云云。
579+
若「象」等於二者。
580+
施「求多項式」於「正弦多項式」。於「二次冪」。乘其以「二次冪」。減其於負一。乘其以「丁」。乃得矣。云云。
581+
若「象」等於三者。
582+
施「求多項式」於「餘弦多項式」。於「二次冪」。乘其以「二次冪」。減其於負一。乃得矣。云云。
485583
云云。
486-
487-
乘「甲」以「甲」。名之曰「二次冪」。
488-
乘「二次冪」以「甲」。名之曰「三次冪」。
489-
乘「二次冪」以「三次冪」。名之曰「五次冪」。
490-
乘「二次冪」以「五次冪」。名之曰「七次冪」。
491-
乘「二次冪」以「七次冪」。名之曰「九次冪」。
492-
493-
除「三次冪」以六。名之曰「項二」。
494-
除「五次冪」以一百二十。名之曰「項三」。
495-
除「七次冪」以五千零四十。名之曰「項四」。
496-
除「九次冪」以三十六萬二千八百八十。名之曰「項五」。
497-
498-
減「甲」以「項二」。加其以「項三」。減其以「項四」。加其以「項五」。乃得矣。
499-
584+
施「不可算數乎」於「甲」。若其者。
585+
乃得「甲」也。
586+
施「不可算」。乃得矣。
500587
是謂「正弦」之術也。
501588

502589
注曰「「餘弦。同Javascript之Math.cos也。」」
503590
今有一術。名之曰「餘弦」。欲行是術。必先得一數曰「甲」。乃行是術曰。
504591
注曰「「餘弦者。蓋正弦之變化所得。」」
505592

506-
加「甲」以「半圓周率」。取一以施「正弦」。乃得矣。
507-
593+
施「絕對」於「甲」。名之曰「乙」。
594+
若「乙」小於「下位冪」者。
595+
乃得一也。
596+
若「乙」小於「正餘弦角限」者。
597+
乘「甲」於「甲」。名之曰「二次冪」。
598+
施「求多項式」於「餘弦多項式」。於「二次冪」。乘其以「二次冪」。加其以一。乃得矣。云云。
599+
若「乙」不大於「至巨數」者。
600+
施「分四象」於「甲」。於「正餘弦角限」。名之曰「丙」。
601+
夫「丙」之「「角」」。名之曰「丁」。夫「丙」之「「象」」。名之曰「象」。
602+
乘「丁」於「丁」。名之曰「二次冪」。
603+
若「象」等於零者。
604+
施「求多項式」於「餘弦多項式」。於「二次冪」。乘其以「二次冪」。加其於一。乃得矣。云云。
605+
若「象」等於一者。
606+
施「求多項式」於「正弦多項式」。於「二次冪」。乘其以「二次冪」。減其於負一。乘其以「丁」。乃得矣。云云。
607+
若「象」等於二者。
608+
施「求多項式」於「餘弦多項式」。於「二次冪」。乘其以「二次冪」。減其於負一。乃得矣。云云。
609+
若「象」等於三者。
610+
施「求多項式」於「正弦多項式」。於「二次冪」。乘其以「二次冪」。加其於一。乘其以「丁」。乃得矣。云云。
611+
云云。
612+
施「不可算數乎」於「甲」。若其者。
613+
乃得「甲」也。
614+
施「不可算」。乃得矣。
508615
是謂「餘弦」之術也。
509616

510617
注曰「「反正弦。同Javascript之Math.asin也。」」
@@ -543,39 +650,40 @@
543650

544651
注曰「「正切。同Javascript之Math.tan也。」」
545652
今有一術。名之曰「正切」。欲行是術。必先得一數曰「甲」。乃行是術曰。
546-
注曰「「數小甚矣。乃得其身。居零與二十二度三十分之間者。以泰勒展開求之。其餘或以三角恆等式。或以週期性可得。」」
547-
548-
施「絕對」於「甲」。若其小於零又一絲者。乃得「甲」也。
549-
550-
若「甲」大於「圓周率」者。減「甲」以「圓周率」。取一以施「正切」。乃得矣。云云。
551-
若「甲」小於零者。加「甲」以「圓周率」。取一以施「正切」。乃得矣。云云。
653+
注曰「「數小甚矣。乃得其身。其餘或以三角恆等式。或以週期性可得。」」
552654

553-
若「甲」大於「半圓周率」者。減「圓周率」以「甲」。取一以施「正切」。減其於零。乃得矣。云云。
554-
555-
除「半圓周率」以二。若其小於「甲」者。
556-
減「半圓周率」以「甲」。取一以施「正切」。除其於一。乃得矣。
557-
云云。
558-
559-
除「半圓周率」以四。若其小於「甲」者。
560-
除「甲」以二。取一以施「正切」。名之曰「半甲正切」。
561-
562-
乘「半甲正切」以「半甲正切」。減其於一。名之曰「分母」。
563-
乘「半甲正切」以二。除其以「分母」。乃得矣。
655+
施「絕對」於「甲」。名之曰「乙」。
656+
若「乙」小於「下位冪」者。
657+
乃得「甲」也。
658+
若「乙」小於「正餘弦角限」者。
659+
乘「甲」於「甲」。名之曰「二次冪」。
660+
施「求多項式」於「正弦多項式」。於「二次冪」。乘其以「二次冪」。加其以一。乘其以「甲」。名之曰「勾」。
661+
施「求多項式」於「餘弦多項式」。於「二次冪」。乘其以「二次冪」。加其以一。名之曰「股」。
662+
除「勾」以「股」。乃得矣。云云。
663+
若「乙」不大於「至巨數」者。
664+
施「分四象」於「甲」。於「正餘弦角限」。名之曰「丙」。
665+
夫「丙」之「「角」」。名之曰「丁」。夫「丙」之「「象」」。名之曰「象」。
666+
乘「丁」於「丁」。名之曰「二次冪」。
667+
若「象」等於零者。
668+
施「求多項式」於「正弦多項式」。於「二次冪」。乘其以「二次冪」。加其於一。乘其以「丁」。名之曰「勾」。
669+
施「求多項式」於「餘弦多項式」。於「二次冪」。乘其以「二次冪」。加其於一。名之曰「股」。
670+
除「勾」以「股」。乃得矣。云云。
671+
若「象」等於一者。
672+
施「求多項式」於「餘弦多項式」。於「二次冪」。乘其以「二次冪」。加其於一。名之曰「勾」。
673+
施「求多項式」於「正弦多項式」。於「二次冪」。乘其以「二次冪」。減其於負一。乘其以「丁」。名之曰「股」。
674+
除「勾」以「股」。乃得矣。云云。
675+
若「象」等於二者。
676+
施「求多項式」於「正弦多項式」。於「二次冪」。乘其以「二次冪」。減其於負一。乘其以「丁」。名之曰「勾」。
677+
施「求多項式」於「餘弦多項式」。於「二次冪」。乘其以「二次冪」。減其於負一。名之曰「股」。
678+
除「勾」以「股」。乃得矣。云云。
679+
若「象」等於三者。
680+
施「求多項式」於「餘弦多項式」。於「二次冪」。乘其以「二次冪」。減其於負一。名之曰「勾」。
681+
施「求多項式」於「正弦多項式」。於「二次冪」。乘其以「二次冪」。加其於一。乘其以「丁」。名之曰「股」。
682+
除「勾」以「股」。乃得矣。云云。
564683
云云。
565-
566-
乘「甲」以「甲」。名之曰「二次冪」。
567-
乘「二次冪」以「甲」。名之曰「三次冪」。
568-
乘「二次冪」以「三次冪」。名之曰「五次冪」。
569-
乘「二次冪」以「五次冪」。名之曰「七次冪」。
570-
乘「二次冪」以「七次冪」。名之曰「九次冪」。
571-
572-
除「三次冪」以三。名之曰「項二」。
573-
乘「五次冪」以二。除其以十五。名之曰「項三」。
574-
乘「七次冪」以十七。除其以三百十五。名之曰「項四」。
575-
除「九次冪」以六十二。除其以二千八百三十五。名之曰「項五」。
576-
577-
加「甲」以「項二」。加其以「項三」。加其以「項四」。加其以「項五」。乃得矣。
578-
684+
施「不可算數乎」於「甲」。若其者。
685+
乃得「甲」也。
686+
施「不可算」。乃得矣。
579687
是謂「正切」之術也。
580688

581689
注曰「「反正切。同Javascript之Math.atan也。」」

0 commit comments

Comments
 (0)