25 lines
		
	
	
		
			638 B
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			25 lines
		
	
	
		
			638 B
		
	
	
	
		
			Factor
		
	
	
! Copyright (C) 2009 Samuel Tardieu.
 | 
						|
! See http://factorcode.org/license.txt for BSD license.
 | 
						|
USING: kernel math math.functions sequences vectors ;
 | 
						|
IN: math.continued-fractions
 | 
						|
 | 
						|
<PRIVATE
 | 
						|
 | 
						|
: split-float ( f -- d i ) dup >integer [ - ] keep ;
 | 
						|
 | 
						|
: closest ( seq -- newseq ) unclip-last round >integer suffix ;
 | 
						|
 | 
						|
PRIVATE>
 | 
						|
 | 
						|
: next-approx ( seq -- )
 | 
						|
    dup [ pop split-float ] [ push ] bi
 | 
						|
    dup zero? [ 2drop ] [ recip swap push ] if ;
 | 
						|
 | 
						|
: >ratio ( seq -- a/b )
 | 
						|
    closest reverse unclip-slice [ swap recip + ] reduce ;
 | 
						|
 | 
						|
: approx ( epsilon float -- a/b )
 | 
						|
    dup 1vector
 | 
						|
    [ 3dup >ratio - abs < ] [ dup next-approx ] while
 | 
						|
    2nip >ratio ;
 |