Macros | Functions
flt32.h File Reference

Defines interface of flt32.c functions (do not modify) More...

Go to the source code of this file.

Macros

#define flt32   int
 

Functions

int flt32_get_sign (flt32 x)
 
int flt32_get_exp (flt32 x)
 
int flt32_get_val (flt32 x)
 
void flt32_get_all (flt32 x, int *sign, int *exp, int *val)
 
int flt32_left_most_1 (int bits)
 
flt32 flt32_abs (flt32 x)
 
flt32 flt32_negate (flt32 x)
 
flt32 flt32_add (flt32 x, flt32 y)
 
flt32 flt32_sub (flt32 x, flt32 y)
 

Detailed Description

This file defines the interface to a C file flt32.c that you will complete. You will learn how to do floating point arithmatic without using any float variables. Rather you will perform the operations by using the sign, exponent, and digit fields as defined in the IEEE floating Point Standard.

Macro Definition Documentation

#define flt32   int

Whenever flt32" is used, the value is an integer in the IEEE floating point 32 bit standard. Everything in a computer is stored as a series of 0/1's. When you use an int to type a value, you are telling the compiler (and ultimately the CPU) to treat the 0/1's as a two's completemt number. When you use float, the 0/1's represent a floating point number. When an addition is performed, the computer knows whether to use the integer or floating point add instruction. The two instruction do different things to the 0/1's.

In this assignment, you are doing floating point addition without using floating point instructions. You are directly doing the bit manipulations necessary to to complete the add. Since flt32 is an int, the compiler will generate integer instructions. The flt32 is to remind you (the programmer), that although the computer is going to treat all values as integers, you know it is really 3 values (sign, exponent, mantissa) packed into 32 bits. Your responsitility is to unpack the three pieces, do the operations necessary to complete the add, then put the three values back together.

Function Documentation

flt32 flt32_abs ( flt32  x)

Absolute value of the argument. This can be done with a simple bit manipulation operation. No conditionals are required.

Parameters
xthe integer containing a IEEE floating point value
Returns
the absolute value of the parameter
Todo:
Implement in flt32.c based on documentation contained in flt32.h
flt32 flt32_add ( flt32  x,
flt32  y 
)

Add two floating point values

Parameters
xan integer containing a IEEE floating point value
yan integer containing a IEEE floating point value
Returns
x + y. Your code needs to account for a value of 0.0, but no other special cases (e.g. infinities)
Todo:
Implement in flt32.c based on documentation contained in flt32.h
void flt32_get_all ( flt32  x,
int *  sign,
int *  exp,
int *  val 
)

Get the sign, exponent, and value in a single call. You will use the

Parameters
xthe integer containing a IEEE floating point value
signpointer to location where sign will be stored
exppointer to location where exponent will be stored
valpointer to location where value will be stored C pointers to return values.
Todo:
Implement in flt32.c based on documentation contained in flt32.h
int flt32_get_exp ( flt32  x)

Extract the exponent of the argument

Parameters
xthe integer containing a IEEE floating point value
Returns
the biased exponent of the argument
Todo:
Implement in flt32.c based on documentation contained in flt32.h
int flt32_get_sign ( flt32  x)

Extract the sign of the argument

Parameters
xthe integer containing a IEEE floating point value
Returns
0 if the value is 0 or positive, 1 if it is negative
Todo:
Implement in flt32.c based on documentation contained in flt32.h
int flt32_get_val ( flt32  x)

Extract the digits of the argument

Parameters
xthe integer containing a IEEE floating point value
Returns
the 24 bits representing the value (includes the implicit 1)
Todo:
Implement in flt32.c based on documentation contained in flt32.h
int flt32_left_most_1 ( int  bits)

Extract the position of the left most 1 in the argument's bits

Parameters
bitsthe integer
Returns
-1 if the value is 0, otherwise the position (0 to 31) of the left most 1 bit.
Todo:
Implement in flt32.c based on documentation contained in flt32.h
flt32 flt32_negate ( flt32  x)

Negate the argument. This can be done with a simple bit manipulation function. No conditionals are required.

Parameters
xthe integer containing a IEEE floating point value
Returns
the negation of the value
Todo:
Implement in flt32.c based on documentation contained in flt32.h
flt32 flt32_sub ( flt32  x,
flt32  y 
)

Subtract to floating point values

Parameters
xan integer containing a IEEE floating point value
yan integer containing a IEEE floating point value
Returns
x - y. Your code needs to account for a value of 0.0, but no other special cases (e.g. infinities)
Todo:
Implement in flt32.c based on documentation contained in flt32.h