//Linda Cobb //Winter 98-99 //http://www.timestocome.com //This program converts floating point numbers in base ten //to thier binary floating point format in single precision // (sign bit) (8 exponent bits) (23 bit mantissa) #include #include #define MAX 32 //size of array //prototypes void ConvertExpBinary(int array1[MAX], int exp); void PrintData(int array2[MAX],float data); void ConvertManBinary(int array3[MAX], float data, double mantissa); void main (void){ float input; int array[MAX]; //hold converted number for output int i; //loop control int exponent; //exponent part of number double temp; //for short term calculations double fraction; //fractional part of number (mantissa) //initalize array for(i=0; i "); scanf("%f", &input); //convert number //first take care of sign bit... if(input < 0 ){ array[0] = 1; } //calc exponent exponent = 0; temp = sqrt(input*input); //convert to absolute value if((temp > 0.1)&&(temp < 1)){ //exponent must be zero exponent = 0; }else if( temp > 1){ //+ exponent while(temp > 1){ exponent += 1; temp /= 10; } }else{ //- exponent exponent = 1; while(temp < 1){ exponent -= 1; temp *= 10; } } fraction = temp; ConvertExpBinary(array, exponent); //convert exponent to binary ConvertManBinary(array, input, fraction);//convert mantissa to binary PrintData(array, input); //print out data to screen } void ConvertExpBinary(int array1[MAX], int exp){ double temp; int i,j; temp = sqrt(exp*exp); //*** not as elegant as a loop but faster... if(temp > 127){ array1[1] = 1; temp -= 128;} if(temp > 63){ array1[2] = 1; temp -= 64; } if(temp > 31){ array1[3] = 1; temp -= 32; } if(temp > 15){ array1[4] = 1; temp -= 16; } if(temp > 7){ array1[5] = 1; temp -= 8; } if(temp > 3){ array1[6] =1; temp -= 4; } if(temp > 1){ array1[7] = 1; temp -= 2; } if(temp > 0){ array1[8] = 1; } //convert exponent to two's complement if(exp < 0){ i = 8; while(array1[i] != 1){ //locate leftmost bit i--; } for(j=i; j>0; j--){ //flip bits... if(array1[j] == 1){ array1[j] = 0; }else{ array1[j] = 1; } } } } void PrintData(int array2[MAX], float data){ int i; //loop control printf( "\n you entered:> %f\n\n", data); printf( "The way this number is stored in the computer is...\n"); for(i=0; i= .5){ array3[9] = 1; data -= .5; } if(data >= .25){ array3[10] = 1; data -= .25; } if(data >= .125){ array3[11] = 1; data -= .125; } if(data >= .0625){ array3[12] = 1; data -= .0625; } if(data >= .03215){ array3[13] = 1; data -= .03215; } if(data >= .015625){ array3[14] = 1; data -= .015625; } if(data >= .0078125){ array3[15] = 1; data -= .0078125; } if(data >= .00390625){ array3[16] = 1; data -= .00390625; } if(data >= .001953125){ array3[17] = 1; data -= .001953125; } if(data >= .000965625){ array3[18] = 1; data -= .000965625; } if(data >= .00048828125){ array3[19] = 1; data -= .00048828125; } if(data >= .000244140625){ array3[20] = 1; data -= .000244140625; } if(data >= .000122070312){ array3[21] = 1; data -= .000122070312; } if(data >= .000061035156){ array3[22] = 1; data -= .000061035156; } if(data >= .000030517578){ array3[23] = 1; data -= .000030517578; } if(data >= .000015258789){ array3[24] = 1; data -= .000015258789; } if(data >= .000007629394){ array3[25] = 1; data -= .000007629394; } if(data >= .000003814697){ array3[26] = 1; data -= .000003814697; } if(data >= .000001907348){ array3[27] = 1; data -= .000001907348; } if(data >= .000000953675){ array3[28] = 1; data -= .000000953675; } if(data >= .000000476837){ array3[29] = 1; data -= .000000476837; } if(data >= .000000238418){ array3[30] = 1; data -= .000000238418; } if(data >= .000000238418){ array3[31] = 1; data -= .000000238418; } }