| 
									
										
										
										
											2008-10-21 22:51:54 -04:00
										 |  |  | ! Copyright (C) 2008 Doug Coleman. | 
					
						
							|  |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							| 
									
										
										
										
											2008-11-11 14:05:48 -05:00
										 |  |  | USING: kernel math sequences prettyprint math.parser io | 
					
						
							| 
									
										
										
										
											2008-12-03 20:15:58 -05:00
										 |  |  | math.functions math.bitwise combinators.short-circuit ;
 | 
					
						
							| 
									
										
										
										
											2008-10-21 22:51:54 -04:00
										 |  |  | IN: math.floating-point | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-11 14:05:48 -05:00
										 |  |  | : (double-sign) ( bits -- n ) -63 shift ; inline
 | 
					
						
							|  |  |  | : double-sign ( double -- n ) double>bits (double-sign) ;
 | 
					
						
							| 
									
										
										
										
											2008-10-21 22:51:54 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-11 14:05:48 -05:00
										 |  |  | : (double-exponent-bits) ( bits -- n )
 | 
					
						
							| 
									
										
										
										
											2008-11-29 01:44:39 -05:00
										 |  |  |     -52 shift 11 on-bits mask ; inline
 | 
					
						
							| 
									
										
										
										
											2008-10-21 22:51:54 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : double-exponent-bits ( double -- n )
 | 
					
						
							| 
									
										
										
										
											2008-11-11 14:05:48 -05:00
										 |  |  |     double>bits (double-exponent-bits) ;
 | 
					
						
							| 
									
										
										
										
											2008-10-21 22:51:54 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-11 14:05:48 -05:00
										 |  |  | : (double-mantissa-bits) ( double -- n )
 | 
					
						
							| 
									
										
										
										
											2008-11-29 01:44:39 -05:00
										 |  |  |     52 on-bits mask ;
 | 
					
						
							| 
									
										
										
										
											2008-10-21 22:51:54 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : double-mantissa-bits ( double -- n )
 | 
					
						
							| 
									
										
										
										
											2008-11-11 14:05:48 -05:00
										 |  |  |     double>bits (double-mantissa-bits) ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : >double ( S E M -- frac )
 | 
					
						
							|  |  |  |     [ 52 shift ] dip
 | 
					
						
							|  |  |  |     [ 63 shift ] 2dip bitor bitor bits>double ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : >double< ( double -- S E M )
 | 
					
						
							|  |  |  |     double>bits
 | 
					
						
							|  |  |  |     [ (double-sign) ] | 
					
						
							|  |  |  |     [ (double-exponent-bits) ] | 
					
						
							|  |  |  |     [ (double-mantissa-bits) ] tri ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : double. ( double -- )
 | 
					
						
							|  |  |  |     double>bits
 | 
					
						
							|  |  |  |     [ (double-sign) .b ] | 
					
						
							| 
									
										
										
										
											2009-01-29 23:19:07 -05:00
										 |  |  |     [ (double-exponent-bits) >bin 11 CHAR: 0 pad-head bl print ] | 
					
						
							| 
									
										
										
										
											2008-11-11 14:05:48 -05:00
										 |  |  |     [ | 
					
						
							| 
									
										
										
										
											2009-01-29 23:19:07 -05:00
										 |  |  |         (double-mantissa-bits) >bin 52 CHAR: 0 pad-head
 | 
					
						
							| 
									
										
										
										
											2008-11-11 14:05:48 -05:00
										 |  |  |         11 [ bl ] times print
 | 
					
						
							|  |  |  |     ] tri ;
 | 
					
						
							| 
									
										
										
										
											2008-12-03 20:15:58 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : infinity? ( double -- ? )
 | 
					
						
							|  |  |  |     double>bits
 | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         [ (double-exponent-bits) 11 on-bits = ] | 
					
						
							|  |  |  |         [ (double-mantissa-bits) 0 = ] | 
					
						
							|  |  |  |     } 1&& ;
 |