ska*_*let 5 c++ floating-point serialization
我为我正在从事的项目编写了一个超级愚蠢的序列化库。我刚刚被浮点无穷大所困扰,我用下面的示例程序来说明这一点。我希望程序能够打印inf -> int,但它却打印了inf -> 0。如何使用std::ostream和std::istream接口来修复它,以给出浮点无穷大(和 NaN)的正确答案?
#include <limits>
#include <sstream>
#include <iostream>
void serialize(std::ostream& dst, float src) {
dst << src;
}
void deserialize(float& dst, std::istream& src) {
src >> dst;
}
int main() {
const float original = std::numeric_limits<float>::infinity();
std::stringstream buffer;
serialize(buffer, original);
float parsed;
deserialize(parsed, buffer);
std::cout << original << " -> " << parsed << '\n';
}
Run Code Online (Sandbox Code Playgroud)