title: ceil() function not returning expected value
body: <p>I am using the ceil() function to round the result of a floating point calculation up to the nearest integer. All sorts of different inputs are experienced...</p>
  
  <pre><code>int(ceil(A*B))
  </code></pre>
  
  <p>Here are some examples to illustrate the problem:</p>
  
  <pre><code>int(ceil(1.01*100)) = 101
  int(ceil(1.02*100)) = 102
  int(ceil(1.03*100)) = 103
  int(ceil(1.04*100)) = 104
  int(ceil(1.05*100)) = 105
  int(ceil(1.06*100)) = 106
  int(ceil(1.07*100)) = 107
  int(ceil(1.08*100)) = 108
  int(ceil(1.09*100)) = 110 ***
  int(ceil(1.10*100)) = 111 ***
  int(ceil(1.11*100)) = 112 ***
  int(ceil(1.12*100)) = 113 ***
  int(ceil(1.13*100)) = 113
  </code></pre>
  
  <p>I realise this is to do with the floating point calculation being performed...</p>
  
  <pre><code>1.09*100 = 109.000000.... &gt; 109
  </code></pre>
  
  <p><strong>I have no idea how to trap this bug reliably</strong></p>
  
  <p>Although i have a couple of 'crude' methods such as the one outlined below, I do not consider this to be a robust enough solution</p>
  
  <pre><code>int(ceil((1.09*100)-0.00000001)) = 109
  </code></pre>