如何使用大值在C ++中表示未定义的数字?

时间:2012-11-22 16:11:39

标签: c++ numbers numerical-methods

在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()模板?

如果我将未定义的值写入文件,它们是否可以跨计算机和操作系统移植?

1 个答案:

答案 0 :(得分:2)

对于浮点数和双精度数,为IEEE754中与NaN相对应的每一个选择一个位模式。然后,您可以在所有可想象的编译器上创建一个用于测试nan的宏,并使用所有可以想象的浮点优化。

对于有符号整数,使用最负值(0x80 ...)

对于无符号整数,使用最正值(0xFF ...)