title: Best practices for float multiplication in C++ or C?
body: <p>I need to perform a simple multiplication of 400 * 256.3. The result is 102520. Straight forward and simple. But to implement this multiplication in C++ (or C) is a little tricky and confusing to me.  </p>
  
  <p>I understand floating point number is not represented as it is in computer. I wrote the code to illustrate the situation. Output is attached too. </p>
  
  <p>So, if I do the multiplication using float type variable, I am subjected to rounding error. Using double type variable would have avoided the problem. But let's say I have a very limited resource on the embedded system and I have to optimize the variable type to the very best I could, how can I perform the multiplication using float type variable and not susceptible to rounding error?</p>
  
  <p>I knew the floating point math done by computer is not broken at all. But I am curious for best practice to perform floating point math. 256.3 is just a value for illustration. I would not know what floating point value I will get during runtime. But it is for sure, a floating point value.</p>
  
  <pre><code>int main()
  {
      //perform 400 * 256.3
      //result should be 102520
  
      float floatResult = 0.00f;
      int intResult = 0;
      double doubleResult = 0.00;
  
      //float = int * float
      floatResult = 400 * 256.3f;
      printf("400 * 256.3f = (float)-&gt;%f\n", floatResult);
  
      //float = float * float
      floatResult = 400.00f * 256.3f;
      printf("400.00f * 256.3f = (float)-&gt;%f\n", floatResult);
  
      printf("\n");
  
      //int = int * float
      intResult = 400 * 256.3f;
      printf("400 * 256.3f = (int)-&gt;%d\n", intResult);
  
      //int = float * float;
      intResult = 400.00f * 256.3f;
      printf("400.00f * 256.3f = (int)-&gt;%d\n", intResult);
  
      printf("\n");
  
      //double = double * double
      doubleResult = 400.00 * 256.3;
      printf("400.00 * 256.3 = (double)-&gt;%f\n", doubleResult);
  
      //int = double * double;
      intResult = 400.00 * 256.3;
      printf("400.00 * 256.3 = (int)-&gt;%d\n", intResult);
  
      printf("\n");
  
      //double = int * double
      doubleResult = 400 * 256.3;
      printf("400 * 256.3 = (double)-&gt;%f\n", doubleResult);
  
      //int = int * double
      intResult = 400 * 256.3;
      printf("400 * 256.3 = (int)-&gt;%d\n", intResult);
  
      printf("\n");
  
      //will double give me rounding error?
      if (((400.00 * 256.3) - 102520) != 0) {
          printf("Double give me rounding error!\n");
      }
  
      //will float give me rounding error?
      if (((400.00f * 256.3f) - 102520) != 0) {
          printf("Float give me rounding error!\n");
      }
  
      return 0;
  }
  </code></pre>
  
  <p><a href="https://i.stack.imgur.com/py58I.jpg" rel="nofollow noreferrer">Output from the code above</a></p>