Why Isn't My Floating Point Values Printing Properly?

孤街醉人 提交于 2019-12-02 14:03:26

问题


I am trying to print out the floating point values 0x40a00000 and 0xc0200000. But the values that I print out and the correct values according to the IEEE-754 Floating Point Converter (https://www.h-schmidt.net/FloatConverter/IEEE754.html) are completely different:

The values I should get according to the IEEE converter:

0x3F800000 = 5.00
0xBF000000 = -2.50

The values I get when running:

float tmp1 = 0x40a00000;
float tmp2 = 0xc0200000;

printf("tmp1 = %.2f\n", tmp1);
printf("tmp2 = %.2f\n", tmp2);

is

tmp1 = 1084227584.00
tmp2 = 3223322624.00

For some reason my C code isn't formatting the bits of the floating point values according to IEEE standards and is instead formatting them as if it were an int with a decimal point


回答1:


These are assigning the float representation of the hexadecimal numbers to the floats.

Instead, do this:

int i1 = 0x40a00000;
int i2 = 0xc0200000;
float tmp1, tmp2;
memcpy(&tmp1, &i1, sizeof(int));
memcpy(&tmp2, &i2, sizeof(int));

Print them:

printf("tmp1 = %.2f\n", tmp1);
printf("tmp2 = %.2f\n", tmp2);

Output:

tmp1 = 5.00
tmp2 = -2.50

Full example:

#include <stdio.h>
#include <string.h>

int main(void)
{
    int i1 = 0x40a00000;
    int i2 = 0xc0200000;
    float tmp1, tmp2;
    memcpy(&tmp1, &i1, sizeof(int));
    memcpy(&tmp2, &i2, sizeof(int));
    printf("tmp1 = %.2f\n", tmp1);
    printf("tmp2 = %.2f\n", tmp2);
}



回答2:


These aren't doing what you think they do:

float tmp1 = 0x40a00000;
float tmp2 = 0xc0200000;

You are simply using the hexadecimal representation of the decimal integers that are getting printed; they do not shove these bytes in so they can be interpreted as floats.

It sounds like what you want to do is (somehow) get the bytes you want somewhere, get the address of that, and cast it to be a pointer to a float, which when dereferenced will be interpreted as a float.




回答3:


union
{
   int i;
   float f;
}k1,k2;

k1.i = 0x40a00000;
k2.i = 0xc0200000;

printf("f1 = %.2f\n", k1.f);
printf("f2 = %.2f\n", k2.f);



回答4:


int i1 = 0x40a00000;
int i2 = 0xc0200000;

float f1 = *(float*)&i1;
float f2 = *(float*)&i2;

printf("f1 = %.2f\n", f1);
printf("f2 = %.2f\n", f2);


来源:https://stackoverflow.com/questions/57419259/why-isnt-my-floating-point-values-printing-properly

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!