替代C ++ 11的std :: nextafter和std :: nexttoward for C ++ 03?

时间:2013-05-02 10:41:45

标签: c++ floating-point floating-accuracy c++03

正如标题所说,我所追求的功能是由C ++ 11的数学库提供的,用于查找特定值的下一个浮点值。

除了从std库中提取代码(我可能不得不求助),用C ++ 03(使用GCC 4.4.6)做任何替代方法?

1 个答案:

答案 0 :(得分:3)

平台依赖于假设IEEE754和模数字节式,您可以将浮点数的数据存储为整数,递增1,并检索结果:

float input = 3.15;

uint32_t tmp;

unsigned char * p = reinterpret_cast<unsigned char *>(&tmp);
unsigned char * q = reinterpret_cast<unsigned char *>(&input);

p[0] = q[0]; p[1] = q[1]; p[2] = q[2]; p[3] = q[3];  // endianness?!

++tmp;

q[0] = p[0]; q[1] = p[1]; q[2] = p[2]; q[3] = p[3];

return input;

当然要小心零,NaN和无穷大。