@@ -74,6 +74,10 @@ function addLine(p,q,pdq){
7474 " ≅ " + pdq + "<br>" ;
7575}
7676function addFracLine ( contFrac ) {
77+ var pq = getPQ ( contFrac ) ;
78+ addLine ( pq [ 0 ] , pq [ 1 ] , pq [ 0 ] / pq [ 1 ] ) ;
79+ }
80+ function getPQ ( contFrac ) {
7781 var p = "0" ;
7882 var q = "1" ;
7983 for ( var i = contFrac . length - 1 ; i >= 0 ; i -- ) {
@@ -83,7 +87,16 @@ function addFracLine(contFrac){
8387 p = q ;
8488 q = cur ;
8589 }
86- addLine ( q , p , q / p ) ;
90+ return [ q , p ] ;
91+ }
92+ function isBetter ( p1 , q1 , p2 , q2 , a , b ) {
93+ var aq1 = mulStrInt ( a , q1 ) ;
94+ var bp1 = mulStrInt ( b , p1 ) ;
95+ var d1 = lessThan ( aq1 , bp1 ) ? subStrInt ( bp1 , aq1 ) : subStrInt ( aq1 , bp1 ) ;
96+ var aq2 = mulStrInt ( a , q2 ) ;
97+ var bp2 = mulStrInt ( b , p2 ) ;
98+ var d2 = lessThan ( aq2 , bp2 ) ? subStrInt ( bp2 , aq2 ) : subStrInt ( aq2 , bp2 ) ;
99+ return lessThan ( mulStrInt ( d1 , q2 ) , mulStrInt ( d2 , q1 ) ) ;
87100}
88101
89102function addContLine ( contFrac ) {
@@ -122,14 +135,32 @@ function approxFrac(){
122135 }
123136
124137
138+ var origA = a ;
139+ var origB = b ;
125140 var contFrac = [ ] ;
126141 var fract ;
142+ var step = 0 ;
127143 do {
128144 fract = divStrInt ( a , b ) ;
129- contFrac . push ( fract [ 0 ] ) ;
130- addFracLine ( contFrac ) ;
145+ var cur = fract [ 0 ] ;
146+ if ( step == 0 ) {
147+ contFrac . push ( cur ) ;
148+ addFracLine ( contFrac ) ;
149+ } else {
150+ var start = divStrInt ( addStrInt ( cur , "1" ) , "2" ) [ 0 ] ;
151+ for ( var k = start ; lessThan ( k , cur ) || k == cur ; k = addStrInt ( k , "1" ) ) {
152+ if ( k == start && divStrInt ( cur , "2" ) [ 1 ] == "0" ) {
153+ var pq1 = getPQ ( contFrac . concat ( [ k ] ) ) ;
154+ var pq2 = getPQ ( contFrac ) ;
155+ if ( ! isBetter ( pq1 [ 0 ] , pq1 [ 1 ] , pq2 [ 0 ] , pq2 [ 1 ] , origA , origB ) ) { continue ; }
156+ }
157+ addFracLine ( contFrac . concat ( [ k ] ) ) ;
158+ }
159+ contFrac . push ( cur ) ;
160+ }
131161 a = b ;
132162 b = fract [ 1 ] ;
163+ step ++ ;
133164 } while ( fract [ 1 ] != "0" ) ;
134165
135166 addContLine ( "[" + contFrac . toString ( ) . replace ( "," , ";" ) + "]" , 1 , 0 ) ;
0 commit comments