Boost logo

Boost Users :

Subject: [Boost-users] Numeric Cast from integer to floating point
From: dariomt_at_[hidden]
Date: 2014-09-08 09:53:50


Hi,

Quoting the docs for boost::numeric_cast: "There are several situations
where conversions are unsafe: [...] Conversions from floating point types
to integral types."

What about conversions from integral types to floating point types? E.g.
from 64bit int to double.

The following example shows what I mean:

#include <iostream>
#include <cmath>
#include <boost/numeric/conversion/cast.hpp>

int main()
{
    const uint64_t i = 123445678911188878;
    std::cout << "i=" << i << std::endl;

    const double d = i;
    std::cout << "d=" << std::fixed << d << std::endl;
    std::cout << "next=" << std::fixed << std::nextafter(d,
 std::numeric_limits<double>::max() ) << std::endl;
    std::cout << "prev=" << std::fixed << std::nextafter(d,
-std::numeric_limits<double>::max()) << std::endl;

    // I'd expect the following cast to fail
    const double dd = boost::numeric_cast<double>(i);
    std::cout <<"dd=" << std::fixed << dd << std::endl;

    return 0;
}

prints

i=123445678911188878

d=123445678911188880.000000

next=123445678911188896.000000

prev=123445678911188864.000000

dd=123445678911188880.000000

because that integer cannot be represented in double precision

Is there something in Boost to help here?

Thanks in advance



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net