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

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

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

除了从 std 库中提取代码(我可能不得不求助于它)之外,还有其他方法可以使用 C++03(使用 GCC 4.4.6)执行此操作吗?

最佳答案

依赖于平台,假设 IEEE754 和模字​​节顺序,您可以将 float 的数据存储在一个整数中,递增 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 和无穷大。

关于c++ - 替代 C++11 的 std::nextafter 和 std::nexttoward for C++03?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16335992/

相关文章:

c++ - boost 共享指针构造函数析构函数

sql-server - SQL Server 的 float 小于 2.23E-308( double 的最小值)

c++ - int64_t 再次加倍到 int64_t,精度损失

c++ - 如何使用 date.h 在 C++ 中获取当前星期几?

c++ - 二元运算符返回 Xvalue 而不是 PRvalue?

.net - CLR JIT 优化违反了因果关系?

math - float 学坏了吗?

algorithm - float 的精确和

c++ - 为什么pread不能保证读取所有指定的字节?

java - 关于乘法的奇怪的 java.lang.Double 簇