Assigned: 12 October 2004
Due: 26 October 2004
The goal of this assignment is to give you more programming experience with the MIPS instruction set and to expose you to issues of floating point precision.
Consider the series EN(x) = 1 + x + x2 + x3 + ... + xN. For values of -1 < x < 1 this series will produce the same value as Ec(x) = (1-xN+1)/(1-x) with exact arithmetic.
float pow(float x, int N)
that computes xN by repeated multiplication using single-precision floating-point arithmetic.Ec
that takes a single precision floating point number x and an integer N as arguments and evaluates (1-xN+1)/(1-x) and returns the result. Call your pow
function to evaluate xN in this calculation.Efwd
that takes the same arguments and evaluates the series forward. That is, in the natural order starting with 1.Erev
that takes the same arguments and evaluates the series backward. That is, starting from the last term xN and working back toward 1.main
function that calls each of your functions for x=0.9 and N = 100. Print the result of each function and the difference Efwd – Ec and Erev – Ec.The register usage conventions for the floating point registers are:
$f0 - $f2 floating point subprogram return value $f4 - $f10 temporaries - not preserved across calls $f12 - $f14 the first 2 floating point parameters - not preserved across calls $f16 - $f18 temporaries - not preserved across calls $f20 - $f30 saved values - preserved across calls