Home > Blockchain >  Is any precision difference between (float int) and (float (float)int) in C ?
Is any precision difference between (float int) and (float (float)int) in C ?

Time:06-03

For example,

If I have int A = 106 and float B = 10.345f, which operation has better precision, A B or (float)A B? Or do they actually have the same precision?

CodePudding user response:

No there is no difference. When adding two arithmetic types, there is a set of implicit conversions that are applied by the compiler. You can find a list of these rules for example on cppreference. In your case rule number 3) applies:

  1. Otherwise, if one operand is float, float complex, or float imaginary, the other operand is implicitly converted as follows:
    • integer type to float (the only real type possible is float, which remains as-is)
    • [...]

So if you do not explicitely state the conversion using a cast, the compiler implicitely does exactly the same conversion for you. And because the expressions are actually the same, there is also no difference in precision.

CodePudding user response:

If you look at the compiler results https://godbolt.org/z/x5174j8n9, then you see that functions

float add1(int A, float B)
{
    return A   B;
}

float add2(int A, float B)
{
    return (float)A   B;
}

give identical compiler output with O2 or O3 optimization enabled:

add1(int, float):
        movaps  xmm1, xmm0
        pxor    xmm0, xmm0
        cvtsi2ss        xmm0, edi
        addss   xmm0, xmm1
        ret
add2(int, float):
        movaps  xmm1, xmm0
        pxor    xmm0, xmm0
        cvtsi2ss        xmm0, edi
        addss   xmm0, xmm1
        ret
  •  Tags:  
  • c
  • Related