decimal

: C>F ( C -- F ) 9 5 */ 32 + ;

: F>C ( F -- C ) 32 - 5 9 */ ;

: B+	( t1 n1 t2 n2 -- t n )
	\ breuken optellen t1/n1 + t2/n2 = ((t1*n2)+(t2*n1))/(n1*n2)
	rot 		\ t1 t2 n2 n1
	2dup * >r	\ t1 t2 n2 n1 (n1*n2 on r-stack)
	rot *		\ t1 n2 sub	  (sub=t2*n1)	
	rot rot		\ sub t1 n2
	* + r>		\ t n
	;
	
: B-	( t1 n1 t2 n2 -- t n)
	\ breuken aftrekken t2 negatief maken en optellen
	swap negate swap
	B+
	;
	
: B*	( t1 n1 t2 n2 -- t n )	
	\ breuken vermenigvuldigen t1/n1 * t2/n2 = (t1*t2)/(n1*n2)
	rot 		\ t1 t2 n2 n1
	* >r * r>	\ t n
	;
	
: B/	( t1 n1 t2 n2 -- t n )	
	\ delen door breuk = vermenigvuldigen met omgekeerde breuk
	swap B*
	;
	
: C>>F			( ct cn -- ft fn )
	9 1 B* 		\ ct/cn * 9/1 = t/n	
	5 1 B/		\ t/n * 1/5 = t/n  
	32 1 B+		\ t/n + 32/1
	;
	
: F>>C			( ft fn -- ct cn )
	32 1 B-		\ t/n - 32/1
	5 1 B*		\ t/n * 5/1 = t/n
	9 1 B/		\ ct/cn * 1/9 = t/n
	;
	
\ .Q according to assignment	
: .Q 			( t n digits -- )
   >r				\ save digits to return stack
   tuck /mod		\ ( n d -- q r d ) q=intpart, r=remainder
   .  8 emit  ." ,"	\ print integer part and decimal sign
   begin
     r@ 0 >			\ digits left?
   while
     10 *			\ remainder * 10
     over /mod		\ divide by d ? quotient = next digit 
     1 .r			\ print digit
   r> 1- >r			\ decrement digit counter
   repeat
   2drop rdrop ;	\ clean stack
   
\ .Q signed and rounding
: .Q_SR			( t n digits -- )
   >r				\ save digits to return stack
   2dup xor 0< if ." -" then	\ minus sign with a negative figure
   abs swap abs		\ make t and n positive for correct calculation
   over /mod .		\ print number before decimal sign
   8 emit  ." ,"	\ back one position and decimal sign
   begin
     r@ 1 >			\ digits left?
   while
     10 *			\ remainder * 10
     over /mod		\ divide by d ? quotient = next digit 
     1 .r			\ print digit
     r> 1- >r		\ decrement digit counter
   repeat
   rdrop
   10 * over /mod >r	\ calculate last digit 
   10 * over /mod 		\ calculate extra digit
   4 > abs r> + 1 .r	\ 5 and higher add 1 to last digit
   2drop ;      \ clean stack
      