Deutsch   English   Français   Italiano  
<2c66c7a1070615fb7c6ca6daa4996cf0@www.novabbs.com>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!weretis.net!feeder9.news.weretis.net!i2pn.org!i2pn2.org!.POSTED!not-for-mail
From: melahi_ahmed@yahoo.fr (Ahmed)
Newsgroups: comp.lang.forth
Subject: Re: exercise in double number arithmetic
Date: Sun, 7 Jul 2024 08:00:37 +0000
Organization: novaBBS
Message-ID: <2c66c7a1070615fb7c6ca6daa4996cf0@www.novabbs.com>
References: <v6c8v0$3usoe$1@dont-email.me> <d8c4fb485e3902438986317b3ed41330@www.novabbs.com> <v6ckp1$obt$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Info: i2pn2.org;
	logging-data="2439017"; mail-complaints-to="usenet@i2pn2.org";
	posting-account="hogn68ACS2mVV0PcPkBzD/3kIXL71Lu5zlxJ/QczJJE";
User-Agent: Rocksolid Light
X-Spam-Checker-Version: SpamAssassin 4.0.0
X-Rslight-Site: $2y$10$x4vGajaaYeBZZVOT8K9TluE0At9bNW7AyG.BMAcoKNGIqBrg5jdt2
X-Rslight-Posting-User: cdd77cd46f5cefdf617b921703a970831cf47f35
Bytes: 2247
Lines: 43

I noticed there was a problem in my double artihmetic version of the
program.
It is about table's elements addressing.
for example, it gives 2 for 26 0 istead of 1, and the error spreads for
the next calculations

Here is the new version. It works fine for n<=49 (it is due to my choice
of 50 lines of Pascal's triangle)



create table 50 50 2* * cells allot


table 50 50 * 2* cells erase
: table.init 50 0 do 1. table i 50 * 2* cells + 2! loop ;
table.init
: table.calc 50 1 do 50 1 do table j 1 - 50 * i 1 - + 2* cells + 2@
                             table j 1 - 50 * i     + 2* cells + 2@ d+
                             table j     50 * i     + 2* cells + 2!
loop loop ;
table.calc


: bcoef_tab swap 50 * swap + 2* cells table + 2@ d. ;


Here a comaprison with results given table version and minforth verson
side by side, the results are identical.

: BCOEF  ( n k -- )
  swap s>f 1e 1+ 1 ?DO
    fover 1e f+ i s>f f- i s>f f/ f*
  LOOP fswap fdrop fround f>d d. ;

minforth version works for any n and k. It uses the fact that:

     C(n,k) = prod((n+1-i)/(i)) for i = 1 to k
            = ((n+1-k)/(k))...(n/1) = (n!/(n-k)!)/k!

: go 50 0 do i 1+ 0 ?do cr j . i . j i bcoef_tab j i bcoef loop loop ;


Ahmed