[vtkusers] Re: Float to Int
David Gobbi
dgobbi at atamai.com
Wed Jul 19 08:38:17 EDT 2006
Russell Hind wrote:
> Patrícia Gonçalves wrote:
>> I'm not familiar with Tcl and I don't know if it has a Round method,
>> but you can make one yourself:
>>
>> float j = (number);
>> int i = j; // making i equal to the floor of (number)
>> if (j-i>=0.5) i=i+1;
>>
>
> Why not just
>
> float j = (number);
> int i = (j + 0.5f);
>
The problem with this is that the addition introduces some
roundoff error. For example, if j = 5.499999 and you add
0.5, you might get 6.0 due to roundoff, instead of
5.999999 as you would expect. The method that Patricia
gave does not suffer from roundoff error.
Both of these methods only work on on positive numbers,
since a float-to-int conversion is a truncation operation
rather than a floor operation.
The way to do exact rounding in C++ is the following:
double x = value;
double y = floor(x);
if (x - y >= 0.5) { y++; }
int i = y;
You don't want to convert to int until the very end, or else
overflow will not be handled properly.
- David
More information about the vtkusers
mailing list