在C ++中,我想使用一对大值来表示未定义的数字:
void setUndefined(float& a) {
a = set_undefined_value;
}
bool isUndefined(float a) {
return a > is_undefined_value;
}
我想对所有数字类型和模板化代码使用这种方法,所以我按照模板的思路思考:
template<typename T>
class Undefined {
public:
static T set_undefined_value() {
NOT_IMPLEMENTED_FOR_THIS_TYPE_YET;
}
static T is_undefined_value() {
NOT_IMPLEMENTED_FOR_THIS_TYPE_YET;
}
};
// Template specialization for all numeric types: ...
如何为所有数字类型找到合适的值对?
是否有例如某种方式我可以使用std :: numeric_limits :: max()模板?
如果我将未定义的值写入文件,它们是否可以跨计算机和操作系统移植?
答案 0 :(得分:2)
对于浮点数和双精度数,为IEEE754中与NaN相对应的每一个选择一个位模式。然后,您可以在所有可想象的编译器上创建一个用于测试nan的宏,并使用所有可以想象的浮点优化。
对于有符号整数,使用最负值(0x80 ...)
对于无符号整数,使用最正值(0xFF ...)