2023 Purpose To let you demonstrate your ability to manipulate C integers by implementing floating point addition with integer | Assignment Collections

Computer Science 2023 let you demonstrate your ability to manipulate C integers by implementing

2023 Purpose To let you demonstrate your ability to manipulate C integers by implementing floating point addition with integer | Assignment Collections

 

 

 

Purpose:

To let you demonstrate your ability to manipulate C integers by implementing floating-point addition with integer operations.

 

Assignment

Finish the program below that does floating point addition.

  1. Cut and paste the following:

    /*-------------------------------------------------------------------------*
     *---									---*
     *---		floatAdder.c						---*
     *---									---*
     *---	    This file adds 2 32-bit IEEE floating point numbers with 	---*
     *---	integer operations.  Doesn't handle '+inf', '-inf' or 'NaN'	---*
     *---	properly, nor does it round properly.  Those are the only 2	---*
     *---	bugs of which I'm aware.					---*
     *---									---*
     *---	----	----	----	----	----	----	----	----	---*
     *---									---*
     *---	Version 1.0		2015 June 29		Joseph Phillips	---*
     *---									---*
     *-------------------------------------------------------------------------*/
    
    #include <stdlib.h>
    #include <stdio.h>
    
    //--			Sign related constants				--//
    
    //  PURPOSE:  To tell how many bits to shift the sign bit from the least
    //	signficant position to where the sign bit belongs.
    #define	 SIGN_SHIFT				31
    
    //  PURPOSE:  To be the mask to only keep the sign bit.
    #define	 SIGN_MASK				(0x1 << SIGN_SHIFT)
    
    //  PURPOSE:  To be the mask to keep everything but the sign bit.
    #define	 EVERYTHING_BUT_SIGN_MASK		(~SIGN_MASK)
    
    
    
    //--			Exponent related constants			--//
    
    //  PURPOSE:  To tell how many bits to shift the exponent bit field from the
    //	least signficant position to where the exponent bit field belongs.
    #define	 EXPONENT_SHIFT				23
    
    //  PURPOSE:  To be the mask to only keep the exponent bit field.
    #define	 EXPONENT_MASK			((unsigned)0xFF << EXPONENT_SHIFT)
    
    //  PURPOSE:  To tell the exponent bit pattern for 'infinity' and
    //	'not-a-number'.
    #define	 EXPONENT_INFINITE_BIT_PATTERN		0xFF
    
    //  PURPOSE:  To tell the exponent bit pattern for denormalized numbers
    //	(including 0.0).
    #define	 EXPONENT_DENORMALIZED_BIT_PATTERN	0x00
    
    //  PURPOSE:  To tell the 'bias' of the exponent bit field:
    //	(powerOf2) = (exponentBitPattern) - EXPONENT_BIAS
    #define	 EXPONENT_BIAS				0x7F
    
    //  PURPOSE:  To tell the power of 2 for 'infinity' and 'not-a-number'.
    #define	 INFINITE_POWER_OF_2			+128
    
    //  PURPOSE:  To tell the power of 2 for denormalized numbers (including 0.0):
    #define	 DENORMALIZED_POWER_OF_2		-127
    
    #define	 INDISTINGUISHABLE_FROM_0_POWER_OF_2	(DENORMALIZED_POWER_OF_2-23)
    
    
    //--			Mantissa related constants			--//
    
    //  PURPOSE:  To tell the mask to only keep the mantissa bit field.
    #define	 MANTISSA_MASK				0x007FFFFF
    
    //  PURPOSE:  To tell give the hidden bit in its proper position.
    #define	 MANTISSA_HIDDEN_BIT			0x00800000
    
    //  PURPOSE:  To tell how many bits to shift the mantissa bit field from the
    //	least signficant position to where the mantissa bit field belongs.
    #define	 MANTISSA_SHIFT				0
    
    //  PURPOSE:  To tell how many mantissa bits there are (including hidden bit)
    #define	 NUM_MANTISSA_BITS			24
    
    
    
    //--			Miscellaneous related constants			--//
    
    //  PURPOSE:  To give the maximum length of C-strings.
    #define	 TEXT_LEN				64
    
    
    
    //  PURPOSE:  To return 1 if 'f' is 0.0 or -0.0.  Returns 0 otherwise.
    int 	      	isZero 	(float f)
    {
      unsigned int	u = *(unsigned int*)&f;
    
      //  Your code here
    
      return(0 /* Perhaps change this */);
    }
    
    
    //  PURPOSE:  To return the +1 if the sign of 'f' is positive, or -1 otherwise.
    int		getSign 	(float f)
    {
      unsigned int	u = *(unsigned int*)&f;
    
      //  Your code here
    
      return(0 /* Perhaps change this */);
    }
    
    
    //  PURPOSE:  To return the exponent (the X of 2^X) of the floating point
    //	'f' from 'DENORMALIZED_POWER_OF_2' to 'INFINITE_POWER_OF_2'.
    //	(Does _not_ return the bit pattern.)
    int		getPowerOf2	(float f)
    {
      unsigned int	u	= *(unsigned int*)&f;
      unsigned int 	i	= 0; /* Perhaps change this */
    
      //  Your code here
    
      return(0 /* Perhaps change this */);
    }
    
    
    
    //  PURPOSE:  To return the mantissa of 'f', with the HIDDEN_BIT or-ed in if
    //	 'f' is not denormalized.
    unsigned int	getMantissa	(float f)
    {
      unsigned int	mantissa	= *(unsigned int*)&f;
    
      //  Your code here
    
      return(0 /* Perhaps change this */);
    }
    
    
    
    //  PURPOSE:  To return the 0x0 when given +1, or 0x1 when given -1.
    unsigned char	signToSignBit	(int	sign)
    {
      //  Your code here
    
      return(0 /* Perhaps change this */);
    }
    
    
    //  PURPOSE:  To return the exponent field's bit pattern for power of 2
    //	'powerOf2'.  If 'powerOf2' is greater or equal to 'INFINITE_POWER_OF_2'
    //	then it returns 'EXPONENT_INFINITE_BIT_PATTERN'.  If 'powerOf2' is
    //	less than or equal to 'DENORMALIZED_POWER_OF_2' then it
    //	returns 'EXPONENT_DENORMALIZED_BIT_PATTERN'.  Otherwise it returns the
    //	corresponding bit pattern for 'powerOf2' given bias 'EXPONENT_BIAS'.
    unsigned char	pwrOf2ToExpBits	(int	powerOf2)
    {
      //  Your code here
    
      return(0 /* Perhaps change this */);
    }
    
    
    //  PURPOSE:  To return the mantissa _field_, 'mantissa' with its hidden
    //	bit turned off.
    unsigned int  mantissaField	(unsigned int	mantissa
    				)
    {
      //  Your code here
    
      return(0 /* Perhaps change this */);
    }
    
    
    //  PURPOSE:  To return the floating point number constructed from sign bit
    //	'signBit'
    float	buildFloat	(int		sign,
    			 int		exp,
    			 unsigned int	mantissaBits
    			)
    {
      //  Leave this code alone!
      unsigned int	u	= (signToSignBit(sign)		<< SIGN_SHIFT)	   |
    			  (pwrOf2ToExpBits(exp)		<< EXPONENT_SHIFT) |
    			  (mantissaField(mantissaBits)	<< MANTISSA_SHIFT);
      float 	f	= *(float*)&u;
      return(f);
    }
    
    
    //  PURPOSE:  To return 'f' added with 'g'.
    float	add	(float	f,
    		 float	g
    		)
    {
      //  I.  Handle when either 'f' or 'g' is 0.0:
      if  ( isZero(f) )
        return(g);
    
      if  ( isZero(g) )
        return(f);
    
      //  II.  Do operation:
      int		signF		= getSign(f);
      int		signG		= getSign(g);
      int		powerOf2F	= getPowerOf2(f);
      int		powerOf2G	= getPowerOf2(g);
      unsigned int	mantissaF	= getMantissa(f);
      unsigned int	mantissaG	= getMantissa(g);
      unsigned int	mantissa;
      int	   	powerOf2;
      int		sign;
    
      if  (signF == signG)
      {
        //  II.A.  Do addition:
    
        //  (This is required.)
        //
        //  See which has the bigger power-of-2: 'f' or 'g'
        //  Shift the smaller of the two by the difference in power of 2.
        //  Then add the mantissas.
        //
        //  What is the value of 'powerOf2'?  What is the value of 'sign'?
        //
        //  How do you detect when the mantissa overflows?
        //  What do you do when the mantissa does overflow?
    
      }
      else
      {
        //  II.B.  Do subtraction:
        //  II.B.1.  Handle canceling to 0:
        if  ( (powerOf2F == powerOf2G) && (mantissaF == mantissaG) )
          return(buildFloat(+1,EXPONENT_DENORMALIZED_BIT_PATTERN,0x0));
    
        //  II.B.2.  Do subtraction:
        //  (This is +5 extra credit.)
        //
        //  Subtract the smaller from the bigger.
        //  How do you tell which is bigger from 'powerOf2F', 'powerOf2G', 'mantissaF' and 'mantissaG'?
        //  Do the same mantissa shifting as with addition.
        //
        //  What is the value of 'powerOf2'?  What is the value of 'sign'?
        //
        //  With addition you may be left with too many bits in the mantissa,
        //  with subtraction you may be left with too few.
        //  If that's the case, then keeping shifting the most significant bit
        //  in the mantissa until either it gets to the mantissa's most
        //  significant bit position (the hidden bit's position) or until
        //  'powerOf2' gets down to 'DENORMALIZED_POWER_OF_2'.
        //
        //  Each time you shift 'mantissa' what should you do to 'powerOf2'?
    
      }
    
      //  III.  Return built float:
      //  Leave this code alone!
      return(buildFloat(sign,powerOf2,mantissa));
    }
    
    
    //  PURPOSE:  To first test your 'getSign()', 'getPowerOf2()' and
    //	'getMantissa()' functions, and then your 'add()' function.  Ignores
    //	arguments from OS.  Returns 'EXIT_SUCCESS' to OS.
    int	main	()
    {
      //  Leave this code alone!
      float	f;
      float	g;
      char	text[TEXT_LEN];
    
      do
      {
        printf("Please enter a floating point number or 0 to quit testing: ");
        fgets(text,TEXT_LEN,stdin);
        f = atof(text);
    
        printf("The sign     of %g is %+dn",f,getSign(f));
        printf("The exponent of %g is 2^%dn",f,getPowerOf2(f));
        printf("The mantissa of %g is 0x%06Xn",f,getMantissa(f));
      }
      while  ( !isZero(f) );
    
      printf("nn");
    
      do
      {
        printf("Please enter the 1st floating point number to add: ");
        fgets(text,TEXT_LEN,stdin);
        f = atof(text);
    
        printf("Please enter the 2nd floating point number to add: ");
        fgets(text,TEXT_LEN,stdin);
        g = atof(text);
    
        printf("         You say  %g + %g == %gn",f,g,add(f,g));
        printf("The hardware says %g + %g == %gn",f,g,f+g);
      }
      while  ( !isZero(f) && !isZero(g) );
    
      return(EXIT_SUCCESS);
    }
    

     

  2. Finish the following functions:

    What each should do is given in its comment.

    1. isZero()
    2. getSign()
    3. getPowerOf2()
    4. getMantissa()
    5. signToSignBit()
    6. pwrOf2ToExpBits()
    7. mantissaField()
    8. add()

     

  3. Example output:

    [[email protected] Assign3]$ ./floatAdder 
    Please enter a floating point number or 0 to quit testing: 1
    The sign     of 1 is +1
    The exponent of 1 is 2^0
    The mantissa of 1 is 0x800000
    Please enter a floating point number or 0 to quit testing: -1
    The sign     of -1 is -1
    The exponent of -1 is 2^0
    The mantissa of -1 is 0x800000
    Please enter a floating point number or 0 to quit testing: 4
    The sign     of 4 is +1
    The exponent of 4 is 2^2
    The mantissa of 4 is 0x800000
    Please enter a floating point number or 0 to quit testing: 6  
    The sign     of 6 is +1
    The exponent of 6 is 2^2
    The mantissa of 6 is 0xC00000
    Please enter a floating point number or 0 to quit testing: 7
    The sign     of 7 is +1
    The exponent of 7 is 2^2
    The mantissa of 7 is 0xE00000
    Please enter a floating point number or 0 to quit testing: 7.5
    The sign     of 7.5 is +1
    The exponent of 7.5 is 2^2
    The mantissa of 7.5 is 0xF00000
    Please enter a floating point number or 0 to quit testing: 7.75
    The sign     of 7.75 is +1
    The exponent of 7.75 is 2^2
    The mantissa of 7.75 is 0xF80000
    Please enter a floating point number or 0 to quit testing: 7.875
    The sign     of 7.875 is +1
    The exponent of 7.875 is 2^2
    The mantissa of 7.875 is 0xFC0000
    Please enter a floating point number or 0 to quit testing: 1
    The sign     of 1 is +1
    The exponent of 1 is 2^0
    The mantissa of 1 is 0x800000
    Please enter a floating point number or 0 to quit testing: 2
    The sign     of 2 is +1
    The exponent of 2 is 2^1
    The mantissa of 2 is 0x800000
    Please enter a floating point number or 0 to quit testing: 3
    The sign     of 3 is +1
    The exponent of 3 is 2^1
    The mantissa of 3 is 0xC00000
    Please enter a floating point number or 0 to quit testing: 4
    The sign     of 4 is +1
    The exponent of 4 is 2^2
    The mantissa of 4 is 0x800000
    Please enter a floating point number or 0 to quit testing: 5
    The sign     of 5 is +1
    The exponent of 5 is 2^2
    The mantissa of 5 is 0xA00000
    Please enter a floating point number or 0 to quit testing: 1.4013e-45
    The sign     of 1.4013e-45 is +1
    The exponent of 1.4013e-45 is 2^-127
    The mantissa of 1.4013e-45 is 0x000001
    Please enter a floating point number or 0 to quit testing: 1.7014115e+38
    The sign     of 1.70141e+38 is +1
    The exponent of 1.70141e+38 is 2^126
    The mantissa of 1.70141e+38 is 0xFFFFFD
    Please enter a floating point number or 0 to quit testing: 1.7014117e+38
    The sign     of 1.70141e+38 is +1
    The exponent of 1.70141e+38 is 2^126
    The mantissa of 1.70141e+38 is 0xFFFFFF
    Please enter a floating point number or 0 to quit testing: 1.7014118e+38
    The sign     of 1.70141e+38 is +1
    The exponent of 1.70141e+38 is 2^127
    The mantissa of 1.70141e+38 is 0x800000
    Please enter a floating point number or 0 to quit testing: inf
    The sign     of inf is +1
    The exponent of inf is 2^128
    The mantissa of inf is 0x800000
    Please enter a floating point number or 0 to quit testing: nan
    The sign     of nan is +1
    The exponent of nan is 2^128
    The mantissa of nan is 0xC00000
    Please enter a floating point number or 0 to quit testing: -inf
    The sign     of -inf is -1
    The exponent of -inf is 2^128
    The mantissa of -inf is 0x800000
    Please enter a floating point number or 0 to quit testing: 0
    The sign     of 0 is +1
    The exponent of 0 is 2^-127
    The mantissa of 0 is 0x000000
    
    
    Please enter the 1st floating point number to add: 1
    Please enter the 2nd floating point number to add: 2
             You say  1 + 2 == 3
    The hardware says 1 + 2 == 3
    Please enter the 1st floating point number to add: 2
    Please enter the 2nd floating point number to add: 3
             You say  2 + 3 == 5
    The hardware says 2 + 3 == 5
    Please enter the 1st floating point number to add: 1.234
    Please enter the 2nd floating point number to add: 4.321
             You say  1.234 + 4.321 == 5.555
    The hardware says 1.234 + 4.321 == 5.555
    Please enter the 1st floating point number to add: -1
    Please enter the 2nd floating point number to add: -.5
             You say  -1 + -0.5 == -1.5
    The hardware says -1 + -0.5 == -1.5
    Please enter the 1st floating point number to add: -2
    Please enter the 2nd floating point number to add: -.5
             You say  -2 + -0.5 == -2.5
    The hardware says -2 + -0.5 == -2.5
    Please enter the 1st floating point number to add: -16
    Please enter the 2nd floating point number to add: -0.125
             You say  -16 + -0.125 == -16.125
    The hardware says -16 + -0.125 == -16.125
    Please enter the 1st floating point number to add: -256
    Please enter the 2nd floating point number to add: -0.125
             You say  -256 + -0.125 == -256.125
    The hardware says -256 + -0.125 == -256.125
    Please enter the 1st floating point number to add: -65536
    Please enter the 2nd floating point number to add: -0.125
             You say  -65536 + -0.125 == -65536.1
    The hardware says -65536 + -0.125 == -65536.1
    Please enter the 1st floating point number to add: -1.4013e-45
    Please enter the 2nd floating point number to add: -1.4013e-45
             You say  -1.4013e-45 + -1.4013e-45 == -2.8026e-45
    The hardware says -1.4013e-45 + -1.4013e-45 == -2.8026e-45
    Please enter the 1st floating point number to add: 131072
    Please enter the 2nd floating point number to add: 0.03125
             You say  131072 + 0.03125 == 131072
    The hardware says 131072 + 0.03125 == 131072
    Please enter the 1st floating point number to add: 1
    Please enter the 2nd floating point number to add: -2
             You say  1 + -2 == -1
    The hardware says 1 + -2 == -1
    Please enter the 1st floating point number to add: 3
    Please enter the 2nd floating point number to add: -1
             You say  3 + -1 == 2
    The hardware says 3 + -1 == 2
    Please enter the 1st floating point number to add: -4.25
    Please enter the 2nd floating point number to add: 4
             You say  -4.25 + 4 == -0.25
    The hardware says -4.25 + 4 == -0.25
    Please enter the 1st floating point number to add: inf
    Please enter the 2nd floating point number to add: 9
             You say  inf + 9 == inf
    The hardware says inf + 9 == inf
    Please enter the 1st floating point number to add: -inf
    Please enter the 2nd floating point number to add: 9
             You say  -inf + 9 == -inf
    The hardware says -inf + 9 == -inf
    Please enter the 1st floating point number to add: 0
    Please enter the 2nd floating point number to add: 9
             You say  0 + 9 == 9
    The hardware says 0 + 9 == 9
    [[email protected] Assign3]$ 
    

     

 

 

We give our students 100% satisfaction with their assignments, which is one of the most important reasons students prefer us to other helpers. Our professional group and planners have more than ten years of rich experience. The only reason is that we have successfully helped more than 100000 students with their assignments on our inception days. Our expert group has more than 2200 professionals in different topics, and that is not all; we get more than 300 jobs every day more than 90% of the assignment get the conversion for payment.

Place Order Now

#write essay #research paper #blog writing #article writing #academic writer #reflective paper #essay pro #types of essays #write my essay #reflective essay #paper writer #essay writing service #essay writer free #essay helper #write my paper #assignment writer #write my essay for me #write an essay for me #uk essay #thesis writer #dissertation writing services #writing a research paper #academic essay #dissertation help #easy essay #do my essay #paper writing service #buy essay #essay writing help #essay service #dissertation writing #online essay writer #write my paper for me #types of essay writing #essay writing website #write my essay for free #reflective report #type my essay #thesis writing services #write paper for me #research paper writing service #essay paper #professional essay writers #write my essay online #essay help online #write my research paper #dissertation writing help #websites that write papers for you for free #write my essay for me cheap #pay someone to write my paper #pay someone to write my research paper #Essaywriting #Academicwriting #Assignmenthelp #Nursingassignment #Nursinghomework #Psychologyassignment #Physicsassignment #Philosophyassignment #Religionassignment #History #Writing #writingtips #Students #universityassignment #onlinewriting #savvyessaywriters #onlineprowriters #assignmentcollection #excelsiorwriters #writinghub #study #exclusivewritings #myassignmentgeek #expertwriters #art #transcription #grammer #college #highschool #StudentsHelpingStudents #studentshirt #StudentShoe #StudentShoes #studentshoponline #studentshopping #studentshouse #StudentShoutout #studentshowcase2017 #StudentsHub #studentsieuczy #StudentsIn #studentsinberlin #studentsinbusiness #StudentsInDubai #studentsininternational