0

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

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

4

1 回答 1

2

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

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

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

于 2012-11-22T17:15:41.740 回答