Boost logo

Boost Users :

Subject: Re: [Boost-users] Numeric Cast from integer to floating point
From: Paul A. Bristow (pbristow_at_[hidden])
Date: 2014-09-17 11:10:51


 

 

From: Boost-users [mailto:boost-users-bounces_at_[hidden]] On Behalf Of dariomt_at_[hidden]
Sent: 08 September 2014 14:54
To: boost-users_at_[hidden]
Subject: [Boost-users] Numeric Cast from integer to floating point

 

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?
 
Would using 128-bit floating point help?
 
http://www.boost.org/doc/libs/1_54_0/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/float128.html
 
(though of course, the biggest 128-bit int cannot be represented in 128-bit FP.)
 
Paul
 

 

---
Paul A. Bristow
Prizet Farmhouse
Kendal UK LA8 8AB
+44 (0) 1539 561830
 
 



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