0

私はこのプログラムをミップで持っていますが、倍精度に変更するつもりはありませんでした。単精度と倍精度の浮動小数点命令には同じ命令があるように見えますが、.s の代わりに .d です。

#‎Babylonian method: The babylonian method is one of the many method to approximate Roots.
#The method uses the following C code:
#   float x = n;
#   float y = 1;
#   float e = 0.000001; /* e decides the accuracy level*/
#   while(x - y > e)
#   {
#     x = (x + y)/2;
#     y = n/x;
#   }

.data
StartingStatment:   .asciiz    "Please enter a number that you would like to find the square root of: \n"
Answer:     .asciiz    "Your answer is: \n"
NumberofIterations: .asciiz "Please enter the number of Iteration. Example: 100\n"
ErrorQ: .asciiz "Pleae enter a number which is greater than zero!"
Ended: .asciiz "\n--Ended--"
Y: .float 1.0
SmallValue: .float 0.000001
Two:        .float 2.0


.text
.globl  main
main:

#printing message for StartingStatment
li  $v0, 4
la  $a0, StartingStatment       
syscall 

li  $v0, 6      #load a six into vo for syscall user input  
syscall         
mov.d $f2, $f0      #$f2 have value
mov.d $f8, $f2      ##### convert float to int
cvt.w.d $f8, $f8
mfc1 $t1, $f8       #converted int stored in t1

blt $t1,0,ErrorG    #if int is less than one then throw an error

l.d $f4, Y      #loading float into $f4
l.d $f12, SmallValue    #load value into f12
l.d $f8, Two        #load value into f8

j FindSqaureRoot    #now find the square root 

FindSqaureRoot:

#$f2        #x
#f4     #y 
#f12        #SmallValue
mov.d $f14,$f2 #n

#while(x - y > e)
#  {
#    x = (x + y)/2;
#    y = n/x;
#  }
#  return x;

SubtractionChecking:
sub.d $f2,$f2,$f4               #x-y

c.lt.d  $f2,$f12                # is (x-y) < e?
bc1t    Print                   #yes:  print(Move towards answer)

c.lt.d  $f12,$f2                # is (x-y) > e?
bc1t    Loop                    # yes: Continue with the #loop!


Loop:
add.d $f6,$f2,$f4               #x+y
div.d $f2,$f6,$f8               #divding it by 2
div.d $f4,$f14,$f2              #n/x
j SubtractionChecking

#Printing the answer!
Print:
mov.d $f16,$f2
li $v0,2
syscall

j EndProgram

#Error that is generated when a number is less than 0!
ErrorG:
li  $v0, 4
la  $a0, ErrorQ     
syscall

j EndProgram

EndProgram:
    li  $v0, 4          # printing message for xvalue
    la  $a0, Ended      
    syscall     

    li $v0,10
    syscall
4

0 に答える 0