home .. forth .. colorforth mail list archive ..

Re: [colorforth] SEAForth questions again



--- Charles Shattuck <cshattuck@xxxxxxxxxxxx> wrote:

> I think I can answer one of your questions.  The
> comments around the
> definition of f*f say that it is for multiplying
> fixed point fractions,
> not integers.  These fractions are represented,
> according to the
> comment, as follows:
>
> ss ifff fff ffff ffff
> 
> where ss are sign bits (not sure why there are two
> at this point), i is
> an integer, either 0 or 1, and the f's are the bits
> that represent a
> fraction.  For example, the number $8000 would
> represent 1.0.  $4000
> would represent 0.5.  $2000 would be 0.25.  When you
> multiplied 2 by 5
> you were really multiplying a very small fraction by
> another very small
> fraction, and the answer was so small that it was
> truncated to zero.

Thanks!  I guess this is another example of "when
all else fails, read (and understand) the comments."
I looked it the comp.lang.forth archives where
Jeff had explained the F21 multiply step and the
updated t18 multiply step.  Using that I came
up with this code.

: 8*8 ( n1 n2 -- n1*n2 )  \ 16 bit output
  push 2* 2* .  \ left shift n1 8 times
    2* 2* 2* .
    2* 2* 2* .
    pop +* +* +*
    +* +* +* +*
    +* push drop .
    pop ; 

Now I get the expected results and I get them
MUCH faster.
 
> I added this:
> 
> : asFraction ( num den - fraction) $8000 rot rot */
> ;
> 
> to help me enter fractions and watch the results of
> f*f.  This
> definition needs to come outside the 'machine' '['
> pair, it is not
> machineforth.  It is used as follows:
> 
> machine
> : test-f*f
>    [ 1 2 asFraction ]# [ 1 2 asFraction ]# . .
>    f*f test-f*f -;
> 
> You should see $4000 (0.5) pushed onto the data
> stack twice, and the
> result of f*f is $2000, meaning 0.25.
> 
> I assume f*f is only defined in the ROM for the
> cores with A/D and D/A
> is because it will be useful for scaling A/D inputs.

Yeah, that makes sense.

> As to how you would multiply the integers in your
> matrix example, I
> don't have an easy answer to that yet, but I'll work
> on.
> 
> Charley.

Well, all I needed was to realize I was barking up
the wrong tree. [:)]  The matrix multiplication
now works.

http://www.quartus.net/twiki/pub/Main/VentureForth/MATRIX.F

I'm sure it needs a lot of polishing.  I've also
started a VentureForth page at the Quartus Wiki.
Not much there now.

http://www.quartus.net/cgi-bin/twiki/view/Main/VentureForth

Regards,

John M. Drake



 
____________________________________________________________________________________
Sponsored Link

Get an Online or Campus degree
Associate's, Bachelor's, or Master's - in less than one year.
http://www.findtherightschool.com

---------------------------------------------------------------------
To unsubscribe, e-mail: colorforth-unsubscribe@xxxxxxxxxxxxxxxxxx
For additional commands, e-mail: colorforth-help@xxxxxxxxxxxxxxxxxx
Main web page - http://www.colorforth.com