Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Demoprogramm: PI-Berechnung mit Integer mittels Spigot-Algorithmus Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 2.09.2026 1:58)
Dietmar nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini Station
' ===========================================================================
' Demoprogramm: PI-Berechnung mit Integer mittels Spigot-Algorithmus
' In OCBASIC 1.12a_e1 für Open-Maxi von Dietmar Harlos am 2. September 2026
' ===========================================================================

' Nach:
' http://stanleyrabinowitz.com/bibliography/spigot.pdf
' APPENDIX 2. PASCAL CODE

' Ausgabe überprüfen:
' 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067
' 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067

' --- Definitionen ----------------------------------------------------------

INCLUDE "omax.def"               'Definitionen für die Open-Maxi

DEFINE a &h2aa                   'Array an 1. Adresse hinter dem USER-RAM

DIM n, len, i, j, k, q, x, nines WORD
DIM predigit BYTE

' --- Hauptprogramm ---------------------------------------------------------

End2Host=ON    'Bei Programmende (siehe END) gleich in den Host-Modus wechseln

n   = 100      'Anzahl der zu berechnenden Stellen
len = 10*n / 3

' Array initialisieren (Alle Elemente auf 2 setzen)
FOR j = 1 TO len: POKEW a+j*2, 2: NEXT j

nines = 0
predigit = 0 'First predigit is a 0

FOR j = 1 TO n
  q = 0
  FOR i = len DOWNTO 1 'Work backwards
    x = 10*PEEKW(a+i*2) + q*i
    POKEW a+i*2, x MOD (2*i-1)
    q = x / (2*i-1)
  NEXT i
  POKEW a+2, q mod 10
  q = q / 10

  IF q = 9 THEN
    ADD nines, 1
  ELSE IF q = 10 THEN
    PUT predigit+1+ASC("0")
    predigit = 0
    WHILE nines
      PUT ASC("0") 'zeros
      SUB nines,1
    WEND
  ELSE
    PUT predigit+ASC("0")
    predigit = q
    WHILE nines
      PUT ASC("9")
      SUB nines,1
    WEND
  END IF
NEXT j
PUT predigit+ASC("0")

END            'Zurück in den Hostmodus. Neustart mit RETURN-Taste.

' --- Programmende ---------------------------------------------------------


Passender Link: Infosite zu den OM-Mikrocontrollern

Meine Homepage: http://ccintern.dharlos.de/

 Antwort schreiben

Bisherige Antworten:

Re: Demoprogramm: PI-Berechnung mit Integer mittels Spigot-Algorithmus (von Christian - 2.09.2026 18:52)
    Re: Demoprogramm: PI-Berechnung mit Integer mittels Spigot-Algorithmus (von Dietmar - 2.09.2026 19:25)