math: faster recip for integers and ratios.
							parent
							
								
									b39547a866
								
							
						
					
					
						commit
						009fb4249e
					
				| 
						 | 
				
			
			@ -33,6 +33,16 @@ M: integer /
 | 
			
		|||
        2dup fast-gcd [ /i ] curry bi@ fraction>
 | 
			
		||||
    ] if-zero ;
 | 
			
		||||
 | 
			
		||||
M: integer recip
 | 
			
		||||
    1 swap [
 | 
			
		||||
        division-by-zero
 | 
			
		||||
    ] [
 | 
			
		||||
        dup 0 < [ [ neg ] bi@ ] when fraction>
 | 
			
		||||
    ] if-zero ;
 | 
			
		||||
 | 
			
		||||
M: ratio recip
 | 
			
		||||
    >fraction swap fraction> ;
 | 
			
		||||
 | 
			
		||||
M: ratio hashcode*
 | 
			
		||||
    nip >fraction [ hashcode ] bi@ bitxor ;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -69,7 +69,6 @@ ERROR: log2-expects-positive x ;
 | 
			
		|||
: 2/ ( x -- y ) -1 shift ; inline
 | 
			
		||||
: sq ( x -- y ) dup * ; inline
 | 
			
		||||
: neg ( x -- -x ) -1 * ; inline
 | 
			
		||||
: recip ( x -- y ) 1 swap / ; inline
 | 
			
		||||
: sgn ( x -- n ) dup 0 < [ drop -1 ] [ 0 > 1 0 ? ] if ; inline
 | 
			
		||||
: ?1+ ( x -- y ) [ 1 + ] [ 0 ] if* ; inline
 | 
			
		||||
: rem ( x y -- z ) abs [ mod ] [ + ] [ mod ] tri ; foldable
 | 
			
		||||
| 
						 | 
				
			
			@ -100,6 +99,10 @@ TUPLE: complex { real real read-only } { imaginary real read-only } ;
 | 
			
		|||
 | 
			
		||||
UNION: number real complex ;
 | 
			
		||||
 | 
			
		||||
GENERIC: recip ( x -- y )
 | 
			
		||||
 | 
			
		||||
M: number recip 1 swap / ; inline
 | 
			
		||||
 | 
			
		||||
: fp-bitwise= ( x y -- ? ) [ double>bits ] same? ; inline
 | 
			
		||||
 | 
			
		||||
GENERIC: fp-special? ( x -- ? )
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue