Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #
- # Philipp Schaback
- # Mat. Nr. 1975106
- #
- #
- # Vorbemerkuung:
- # Da Floatoperationen im Allgemeinen als "teuer" angesehen werden, wurde die Bailey-Borwein-Plouffe-Formel
- # auf wenigere FLoatoperationen reduziert. Die dabei enstandene Formel kann der Rückseite des au
- #
- .data
- pi: .asciiz "Pi: "
- nl: .asciiz "\n"
- zero: .double 0.0
- one: .double 1.0
- sixteen: .double 16.0
- .text
- .globl main
- main: li $t0, 0 # Schleifenzähler initialisieren
- li $t1, 10 # Maximum initialisieren
- l.d $f8, sixteen # Konstant 16 initialisieren
- l.d $f10 one # 16er Bruch initialisieren
- l.d $f12, zero # Ergebnisregister initialisieren
- loop: li $t2, 0 # Zähler des großen Bruchs initialisieren
- li $t3, 1 # Nenner des großen Bruchs initialisieren
- li $t4, 120 # 120k^2 berechnen und auf Zähler addieren
- mul $t4, $t4, $t0
- mul $t4, $t4, $t0
- add $t2, $t2, $t4
- li $t4, 151 # 151k berechnen und auf Zähler addieren
- mul $t4, $t4, $t0
- add $t2, $t2, $t4
- addiu $t2, $t2, 47 # 47 auf Zähler addieren
- move $t4, $t0 # (2k+1) berechnen und an den Nenner multiplizieren
- sll $t4, $t4, 1
- addiu, $t4, $t4, 1
- mul $t3, $t3, $t4
- move $t4, $t0 # (4k+3) berechnen und an den Nenner multiplizieren
- sll $t4, $t4, 2
- addiu, $t4, $t4, 3
- mul $t3, $t3, $t4
- move $t4, $t0 # (8k+1) berechnen und an den Nenner multiplizieren
- sll $t4, $t4, 3
- addiu, $t4, $t4, 1
- mul $t3, $t3, $t4
- move $t4, $t0 # (8k+5) berechnen und an den Nenner multiplizieren
- sll $t4, $t4, 3
- addiu, $t4, $t4, 5
- mul $t3, $t3, $t4
- mtc1 $t2, $f0 # Zähler in den Koprozessor laden
- cvt.d.w $f0, $f0 # Zähler auf Double konvertieren
- mtc1 $t3, $f2 # Nenner in den Koprozessor laden
- cvt.d.w $f2, $f2 # Nenner auf Double konvertieren
- div.d $f4, $f0, $f2 # Zähler durch Nenner teilen und Bruch in $f4 speichern
- mul.d $f4, $f4, $f10 # 16er Bruch mit großem Bruch multiplizieren
- add.d $f12, $f12, $f4 # Auf die Gesamtsumme addieren
- addiu $t0, $t0, 1 # Schleifenzähler erhöhen
- div.d $f10, $f10, $f8 # 16er Bruch durch 16 teilen
- ble $t0, $t1, loop # Für 0..10 wiederholen
- li $v0, 4 # Ausgabe und beenden
- la $a0, pi
- syscall
- li $v0, 3
- syscall
- li $v0, 4
- la $a0, nl
- syscall
- li $v0, 10
- syscall
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement