The following gives the incorrect answer for lfp which should be 0x004E47AE but i get a trucated 0x000047AE. If I change the declaration of "long lfp" to "volatile long lfp" it gives me the correct answer. Clue: with the original declaration lfp is assigned to a register, with the volatile it get stored in memory.

    float z, f, fp;
    int eb;
    long lfp;

    z = log(setpoint) / log(2);
    eb = (int)z + 0x7F;
    f = setpoint / 16;
    fp = (f-1) * 8388608; // 2 << 23
    lfp = (long)(fp);

Is this a bug?

I am using CCS v5.1.0.09000, MSP430 Compiler Tools v4.0.0, optimization is set to 0

 

Thank you, Don