Jump to content

Vorticon

Members
  • Content Count

    4,690
  • Joined

  • Last visited

  • Days Won

    2

Posts posted by Vorticon


  1. 1 hour ago, mizapf said:

    I have some problems with the archive files of the Fortran Package (99-9640_FORTRAN_v4.4.zip). My TIImageTool says that 9640COMP and FORTLIB2 are broken (Archive file is clipped). I tried to unpack 9640COMP with ARC3, but it crashes after unpacking F9640 (so there is obviously something wrong with it). I was able to unpack FORTLIB2 with ARC3, maybe there is some issue that is less obvious.

     

    9640LIBR, FORTAPPS, FORTCOMP, FORTLIBR are OK.

     

    Unfortunately, my original disks are all unreadable, and I only have the Geneve version on my hard drive.

     

    Edit: The ML lib is broken after all. This lib is from the FORTLIB2 archive which failed to be unpacked by TIImageTool and was unpacked by ARC3, but obviously not successfully and without error message. I conclude that it is broken because when I try to load it by Link>Library name, I get an I/O error, while CL, GL, and FL load successfully.

     

    I will try to make a copy of the disks sometime this week and post them here.

    • Like 2
    • Thanks 1

  2. 2 hours ago, Lee Stewart said:

     

    Consider it from my perspective. The free format of later computer languages took a little getting used to for me. My need for structure ate it up! The picture format in PL/1 (lifted from Cobol) made sense, but by then, I was thoroughly into Fortran.

     

     

    Again, to me it was straightforward and logical—probably because it was my first computer language. |:)  It is obvious where the loop ends. With later languages, using the same instruction for the end of a loop did not tell you immediately (visually, certainly) which loop-end was attached to which loop-start, which got me into trouble every now and then.

     

    ...lee

    It must have been quite a ride to experience computing from the early pioneering days all the way to the present age! 

    When I took the Fortran course in high school circa 1982, I already was programming my TI in Basic which was my first exposure to computer programming. Compared to the looseness of Basic, Fortran seemed like being in jail! To make matters worse, the manual we were using, which I still have, was from 1978 and expected us to use punched cards for program entry... Kill me now... I passed that course by the skin of my teeth... 

    Incidentally, it looks like Fortran 9640 seems to be based mostly on the 1977 standard, with some earlier elements retained as well.

    I am determined to get familiar again with Fortran however as I am intrigued by its mathematical capabilities :)

     


  3. 2 hours ago, mizapf said:

    Another well-known graph, the bifurcation. I added a script for GeneveOS for building and linking.

     

     

    ******* BIFURC_F
    
    C
    C    Bifurcation (Period doubling)
    C
    C    Dec 8 1990
    C
          DOUBLE PRECISION X,R,DR
          INTEGER COL,ROW
    C
          ROW(X)=IDINT(212D0*(1D0-X/2D0))
    C
          CALL CLEAR
          WRITE (*,*) '    Period doubling'
          CALL SETPOS(12,3)
          WRITE (*,*) 'Along the x axis, the value for r ranges from 1.9 to 3.0 '
          WRITE (*,*) '   and is set in the logistic map'
          WRITE (*,*) '   The behavior of the iteration can be seen in each column.'
          CALL WAIT
    C
          CALL SETMOD(7)
          CALL SCREEN(1)
          CALL SETBRD(1)
    C
          R=1.9D0
          DR=1D0/511D0*1.1D0
          DO 3 I=0,511
             X=0.1D0
             DO 2 J=1,200
    2           X=(1D0+R-R*X)*X
             DO 1 J=1,100
                X=(1D0+R-R*X)*X
                K=ROW(X)
                CALL SETPIX(I,K,2)
    1           LROW=K
    3        R=R+DR
          CALL WAIT
          CALL SET80
          END
    
          
    *********  Makefile
    
    ECHO OFF
    CD \FORTRAN
    F9640 /OPROG\%1_O SOURCE\%1_F
    ECHO
    ECHO Ready for linking?
    ECHO
    PAUSE
    FLINK /OPROG\%1_O /IGL,CL,ML,FL PROG\%1
    DEL PROG\%1_O
    

     

    0031.png

    I wrote a chaos exploration program in assembly in 2010, which includes the logistic equation above :) (from the tigameshelf.net in Edutainment).

     

     

    Chaos Musings

    By Walid Maalouli

    Chaos Musings opening screenChaos Musings running shot


    In my constant strive to stress my TI 99/4A computer to the limit, I decided to explore the realms of Chaos. And no, this is not Warhammer, but a mathematical exploration of chaos visualization. This is a collection of 3 separate programs that create graphical representations of various chaotic equations, which also happen to be fractal. Be forewarned that it can take hours or even days of computations to come up with an image depending on the zoom level requested. The first program looks at the logistic equation, the second investigates the Henon equation, and the last explores Lyapunov space. Not for the faint of heart, but interesting nonetheless if you are into that sort of thing.
    Requirements: Editor/Assembler cartridge, 32K RAM, Disk Drive
    Executable to run: LOGISTIC, HENON or LYAPUNOV (E/A Option 3 - Program name is START)

     

     

    Chaos.dsk

    Chaos.pdf

    • Like 4

  4. 47 minutes ago, dhe said:

    Vorticon,

      One of the items I noted reading through the errata, was the support for predit. That by far was my fav editor.

      I tried multiple times to contact Thomas Bentley to see if I could get the source code. (no luck on even the contact).

      Do you know where I could find the program and manual?

      It's a real let down, that FORTRAN has such stringent column requirements, yet the editor doesn't show what column your end! 😃

      If anyone has contact information for Al Beard, I'd be happy to reach out to him, and see if he still has source and would be willing to share.

    Dano

    Preditor is pretty much the only programming text editor I use on the TI. As I am reading through the Fortran 9640 manual, it's quite evident that the 99/4A version of the included editor is very primitive. And quite frankly, Fortran as a whole seemed pretty archaic in syntax, like the need to use a Format command in addition to a Write command to get anything on screen. And don't get me started with the DO loop structure: what a nightmare...

    Attached is a cartridge image for the 80-column version which works with Classic99 as well as a scan of the manual.

     

    PREDIT80-8.bin

    preditor.pdf

     

    • Like 2

  5. I'm planning to attend the International European Treff in Vienna this October since I'll be visiting my son in Germany around the same time. Hopefully Covid-19 will be a just a bad memory by then. If not, the world is in deep trouble... ☹

    • Like 1

  6. I dug up my Fortran 9640 package and gave it a quick cursory look. Yeah, it will take a little time to go through it. What Fortran version is this based on? This may not be a bad environment for my mathematical explorations on the TI after all...

    I also found a manual errata document which I scanned. Unfortunately, my printer's tray feed only scans single sided, so there are 2 PDF scans attached: one for the front pages and the second for the back pages, the latter starting at the last page. They will need to be printed out and assembled manually unless someone knows how to merge them digitally. Perhaps they might have an answer as to dhe's issues.

     

    Fortran 9640 Errata front pages.pdf

    Fortran 9640 Errata back pages.pdf

     

    Edit: the errata pdf is actually already included in the zip file in the Development Resources pinned thread, so you can ignore this post.

    • Like 5

  7. Both my nephews are PhD candidates in aerospace engineering specializing in fluid dynamics at the University of Minnesota, and all their computational work for modeling is done in Fortran. It apparently is still the preferred language in this field! Who knew...

    • Like 1

  8. I nearly failed Fortran in high school, and have since developed an aversion to it. That said, I should probably give it another chance. I do have the TI Fortran package, so if you post your source code I can try it out and see if I can duplicate your issue.

    Alternatively, try downloading the linker disk again. Sometimes the process corrupts the disks....

    • Like 1

  9. Here is the RXB versus XB RND function comparison using Guillaume's program for an N of 5000. Again expected values are mean= 4.5 and SD=2.87

     

    RXB:

    RXBRND.jpg.1b8c649ec694ba5324e4c9ee124d12c1.jpg

     

    XB:

    XBRND.jpg.6b4d04a72e17243bfae98dcccaca6eaa.jpg

     

    Not a huge difference for all practical purposes unless a very large set of random numbers are needed such as in the PI approximation program in which case the XB RND will be superior.

    • Like 1

  10. 33 minutes ago, moulinaie said:

    Hi,

     

    If you change the organization of your DATA, there is no, limitation.

    You can use a table, let's say form T(0) to T(9) that count how many times a 0, or a 1 , or ... a 9 has appeared with RND.

    This way, you just have to reserve memory for ten numbers.

     

    Then, there is a simplified formula for standard deviation :

    SD = SQR ( [sum of squares] / N - [square of mean] )

     

    100 CALL CLEAR
    110 DIM T(9)
    120 RANDOMIZE
    125 INPUT "How many ":N
    130 FOR I=1 TO N
    140 X=INT(RND*10)
    150 T(X)=T(X)+1
    160 NEXT I
    170 S=0
    180 S2=0
    190 FOR I=0 TO 9
    200 S=S+T(I)*I
    210 S2=S2+T(I)*I*I
    220 NEXT I
    230 S=S/N
    240 S2=S2/N
    250 SD=SQR(S2-S*S)
    260 PRINT "Mean=";S
    270 PRINT "S.Dev=";SD

    I prefer 0 to 9 than 1 to 10, so I skip the "+1" at each random!

     

    The expected values are:

    MEAN = 4.5

    SD = 2.87

     

    Works both in TI Basic and XB.

     

    Guillaume.

    Yes of course! Did not think of it that way. Well done.

    • Like 1

  11. 7 hours ago, senior_falcon said:

    Could you do this for RXB or TI BASIC? It'd be interesting to see how they compare

     

    Here you go, with the caveat that the array size is limited to 1500 in TI Basic:

     

    10 CALL CLEAR
    20 RANDOMIZE
    30 OPTION BASE 1
    40 DIM N(1500)
    50 PRINT "PHASE 1:"
    60 FOR I=1 TO 1500
    70 N(I)=(RND*10)+1
    80 T=T+N(I)
    90 NEXT I
    100 PRINT "PHASE 2:"
    110 MEAN=T/1500
    120 FOR I=1 TO 1500
    130 T1=T1+(N(I)-MEAN)^2
    140 PRINT I
    150 NEXT I
    160 SD=SQR(T1/1500)
    170 PRINT "MEAN:";MEAN:"SD:";SD

    BasicRND.jpg.1f01bd94f56803a6df85d84772f9efef.jpg

     

    Using the same array size in XB gives:

     

    XBRND.jpg.65707f91d112b6541ef4149b78e0a873.jpg

     

    XB is still better, but not my much, although I do expect the gap to widen with a larger number of iterations.

     

    • Like 1

  12. 3 hours ago, moulinaie said:

    Hi again,

     

    I thought that the PI calculation requires two consecutive random numbers to represent X and Y.

    What about the differences between two consecutive terms?

     

    **** UPDATE ****

    I forgot in a first idea that the differences are not equivalent in probability.

    To get 4095 : only one solution 4095-0.

    But to get zero : 0-0, or 1-1, or 2-2 etc...

    So I change the rest of the post

    ***************

     

    Picking numbers from 0 to 4095 leads to:

    • differences are from -4095 to + 4095
    • the perfect mean is zero
    • the standard deviation 1672
    • the perfect mean of absolute differences should be 1365

     

    Looking at the result, the generator is correct even when thinking about the independency between two consecutive terms.

     

    Guillaume.

     

    MLCtest.png

    Impressive results! 

    I went ahead and did a quick and dirty evaluation of the XB RND function generating 3000 numbers from 1-10, the maximum array size I could fit in XB. This is the ideal result:

    192761267_RNDideal.jpg.0544089c9af379d5dac868cfd77f3f08.jpg

     

    and this is the actual result:

     

    1149634134_RNDtest.jpg.35a827f4527ed88b005c6991eaa8c8fa.jpg

     

    Really not bad at all for only 3000 data points. 

    • Like 1

  13. So 1 million iterations in plain XB yielded 3.1434, clearly a very very slow conversion. The MLC version gives about the same answer at 1 million iterations.

    OK so now I'm going to do a trial run for 1 billion under Classic99 to see if I can gain another decimal. This will take a while :) (just kidding. This will take about 3 years to complete! I need a supercomputer cluster. On the other hand, with overdrive on in Classic 99, I might be able to bring it down to about 3.5 months. That's feasible).

     

     

    PI-XB.jpg

     

    xb-MLC.jpg

    • Like 3

  14. I let the MLC version run for a while, and it seems that the Pi value is getting stuck around the 1.427 value +/- 0.005 or so after over 119 million iterations. I wonder if this is a limitation of the RND algorithm.

    The 1 million iterations trial with the XB version is still running, and I'll be curious what kind of result I will get (should be complete within the next 48hrs).

     

     

     

    PI.jpg

    • Like 2

  15. 7 minutes ago, moulinaie said:

    Why this choice? I found a very simple method to generate a random number that only uses integers. One simple 16-bits addition for each call ! Then I remove some of the 16 bits that I think are not so "at random", so I keep 12-bits out of 16.

     

    Then in the PIRAND subroutine, only integers are used. That's why this is so fast.

     

    Have you got the source code of PICALC ?

     

    I would love to see that RND algorithm.

    Here's Picalc's XB source:

     

    10 REM  PI CALCULATOR
    20 REM  BY WALID MAALOULI
    30 REM  AUGUST 2007
    40 REM
    100 CALL CLEAR
    110 OPTION BASE 1
    120 DIM SUM(652),SUM1(652),TERM(652),TEMP(652)
    130 DISPLAY AT(1,8):"Pi Calculator" :: DISPLAY AT(3,6):"By Walid Maalouli" :: DISPLAY AT(5,9):"August 2007"
    140 DISPLAY AT(10,2)BEEP:"# of decimals (mult. of 8)" :: DISPLAY AT(11,2):"(Maximum of 5200 decimals)" :: ACCEPT AT(13,12)VALIDATE(DIGIT):D
    150 IF D>5200 THEN 140
    160 ITR=INT(D/1.4) :: D=INT(D/8)+2
    170 SUM(1)=3 :: SUM(2)=20000000 :: TERM(1)=0 :: TERM(2)=20000000 :: S=0 :: DENOM1=3 :: TBASE=25 :: MULT=16
    180 FOR N=1 TO ITR+1
    190 IF FLAG=0 THEN DISPLAY AT(20,5):"Term 1 iteration #";N;" " ELSE DISPLAY AT(20,5):"Term 2 iteration #";N;" "
    200 IF N=1 THEN 220
    210 FOR I=1 TO D :: TERM(I)=TEMP(I) :: NEXT I
    220 DENOM=TBASE :: REMAINDER=0
    230 GOSUB 1050
    240 FOR I=1 TO D :: TEMP(I)=TERM(I) :: NEXT I
    250 DENOM=DENOM1 :: REMAINDER=0
    260 GOSUB 1050
    270 FOR I=1 TO D
    280 IF S=0 THEN 300
    290 SUM(I)=SUM(I)+MULT*TERM(I) :: GOTO 310
    300 SUM(I)=SUM(I)-MULT*TERM(I)
    310 NEXT I
    320 IF S=0 THEN S=1 ELSE S=0
    330 FOR I=D TO 2 STEP-1
    340 IF SUM(I)>=100000000 THEN 350 ELSE IF SUM(I)<0 THEN 390 ELSE 420
    350 QUOTIENT=INT(SUM(I)/100000000)
    360 SUM(I)=SUM(I)-QUOTIENT*100000000
    370 SUM(I-1)=SUM(I-1)+QUOTIENT
    380 GOTO 420
    390 QUOTIENT=INT(SUM(I)/100000000)+1
    400 SUM(I)=SUM(I)-(QUOTIENT-1)*100000000
    410 SUM(I-1)=SUM(I-1)+QUOTIENT-1
    420 NEXT I
    430 IF FLAG=2 THEN 680
    440 DENOM1=DENOM1+2
    450 NEXT N
    460 IF FLAG=1 THEN 620
    470 TBASE=57121 :: DENOM1=3 :: MULT=4
    480 FOR I=1 TO D
    490 SUM1(I)=SUM(I)
    500 SUM(I)=0 :: TERM(I)=0
    510 NEXT I
    520 TERM(1)=4
    530 DENOM=239 :: REMAINDER=0
    540 GOSUB 1050
    550 FOR I=1 TO D
    560 SUM(I)=TERM(I) :: TERM(I)=0
    570 NEXT I
    580 DENOM=239 :: TERM(1)=1 :: REMAINDER=0
    590 GOSUB 1050
    600 FLAG=1 :: S=0
    610 GOTO 180
    620 PRINT :: PRINT "Finalizing calculations..." :: PRINT
    630 FOR I=1 TO D
    640 SUM1(I)=SUM1(I)-SUM(I) :: SUM(I)=SUM1(I)
    650 NEXT I
    660 FLAG=2
    670 GOTO 330
    680 CALL CLEAR :: DISPLAY AT(2,3)BEEP:"Calculations complete!"
    690 DISPLAY AT(5,3):"Send results to:" :: DISPLAY AT(8,5):"1- Screen" :: DISPLAY AT(10,5):"2- Printer (PIO)" :: DISPLAY AT(12,5):"3- File"
    700 CALL KEY(0,K,ST) :: IF ST=0 THEN 700
    710 IF K<49 OR K>51 THEN 700
    720 ON K-48 GOTO 730,860,950
    730 CALL CLEAR :: PRINT "Pi=3."
    740 FOR I=2 TO D-1
    750 SUM$=STR$(SUM(I))
    760 IF LEN(SUM$)=8 THEN 780
    770 SUM$="0"&SUM$ :: GOTO 760
    780 PRINT SUM$;" ";
    790 L=L+1 :: IF L=64 THEN 800 ELSE 830
    800 PRINT :: PRINT :: DISPLAY AT(24,1)BEEP:"Press any key to continue" :: L=0
    810 CALL KEY(0,K,ST) :: IF ST=0 THEN 810
    820 CALL CLEAR
    830 NEXT I
    840 PRINT :: PRINT :: DISPLAY AT(24,1)BEEP:"End. Press any key to exit"
    850 CALL KEY(0,K,ST) :: IF ST=0 THEN 850 ELSE STOP
    860 OPEN #1:"PIO"
    870 PRINT #1:"Pi=3."
    880 FOR I=2 TO D-1
    890 SUM$=STR$(SUM(I))
    900 IF LEN(SUM$)=8 THEN 920
    910 SUM$="0"&SUM$ :: GOTO 900
    920 PRINT #1:SUM$;" ";
    930 NEXT I
    940 CLOSE #1 :: END
    950 DISPLAY AT(22,1)BEEP:"Enter path.filename:" :: ACCEPT AT(24,1):FL$
    960 OPEN #1:FL$,OUTPUT,VARIABLE 80
    970 PRINT #1:"Pi=3."
    980 FOR I=2 TO D-1
    990 SUM$=STR$(SUM(I))
    1000 IF LEN(SUM$)=8 THEN 1020
    1010 SUM$="0"&SUM$ :: GOTO 1000
    1020 PRINT #1:SUM$;" ";
    1030 NEXT I
    1040 CLOSE #1 :: END
    1050 REM  DIVIDE SUBROUTINE
    1060 FOR I=1 TO D
    1070 DIVIDEND=REMAINDER*100000000+TERM(I)
    1080 TERM(I)=INT(DIVIDEND/DENOM)
    1090 REMAINDER=DIVIDEND-TERM(I)*DENOM
    1100 NEXT I
    1110 RETURN
    

     

    • Like 1
×
×
  • Create New...