
On Tue, Sep 28, 2010 at 4:11 PM, Hartmut Kaiser <hartmut.kaiser@gmail.com> wrote:
Hi I am using boost 1.4.1 Spirit::Qi.
I think we have a floating point truncation bug in the qi::float_ parser. I attached a simple program to repro the bug.
Below are some examples of an input floating point gets truncated (=>) by the qi::float_:
12312321421421 => 12312321720320.000000 123123214 => 123123216.000000 123233.4124 => 123233.406250
I don't see the same issue with the qi::double_.
Wondering if this is a known issue?
If I do:
#include <iostream> #include <iomanip>
int main() { float f1 = 12312321421421.f; float f2 = 123123214.f; float f3 = 123233.4124f;
std::cout.precision(20);
std::cout << "12312321421421 --> " << f1 << std::endl; std::cout << "123123214 --> " << f2 << std::endl; std::cout << "123233.4124 --> " << f3 << std::endl; return 0; }
I get (gcc 4.5.1 and VS2010):
12312321421421 --> 12312321720320 123123214 --> 123123216 123233.4124 --> 123233.4140625
which is almost consistent with what Spirit is doing. The last case worries me, though. I'll try to have a closer look there.
Don't forget, you can output the hex forms of it too using the new C99 float hex convert for things like printf, the hex form would probably explain it.