如何在C++;使用大值? 在C++中,我想使用一对大的值来表示一个未定义的数字: void setUndefined(float& a) { a = set_undefined_value; } bool isUndefined(float a) { return a > is_undefined_value; }

如何在C++;使用大值? 在C++中,我想使用一对大的值来表示一个未定义的数字: void setUndefined(float& a) { a = set_undefined_value; } bool isUndefined(float a) { return a > is_undefined_value; },c++,numbers,numerical-methods,C++,Numbers,Numerical Methods,我想对所有数字类型和模板化代码使用这种方法,因此我按照模板的思路思考: template<typename T> class Undefined { public: static T set_undefined_value() { NOT_IMPLEMENTED_FOR_THIS_TYPE_YET; } static T is_undefined_value() { NOT

我想对所有数字类型和模板化代码使用这种方法,因此我按照模板的思路思考:

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: ... 
模板
类未定义{
公众:
静态T集_未定义_值(){
尚未为该类型的实现;
}
静态T是未定义的值(){
尚未为该类型的实现;
}
};
//所有数字类型的模板专用化:。。。
如何为所有数字类型找到好的值对?

例如,是否有某种方法可以使用std::numeric\u limits::max()模板


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

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

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


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

仅使用NaN有什么问题?NaN有什么问题?它甚至有两种风格。仅仅坚持使用NAN可能比你能想出的任何一种黑客都要快。@Rost实现定义?“阿德里亚诺C++浮动类型不能符合<代码> IEEE 754/IEC 559 < /C>”,这不是标准要求的。例如,参见
数值限制::is_iec559
。另外
IEEE 754
定义了NaN的格式,但没有定义确切的值,因此如果坚持某个值,可能会导致问题。谢谢Minthos!如何选择此位模式?我是否使用数字限制::quiet_NaN()?还有,为什么对有符号整数使用最大负值而不是最大正值?您可以使用quiet_NaN yes,只需将其值打印为十六进制或在调试器中查看即可。使用最大负值,因为负值的范围比正值的范围大1(因为0在正值范围内,即使它既不是正值也不是负值)。我所说的“打印其值”当然是指“打印其位表示”,例如,将其与大小相同的无符号整数并集,并将整数打印为十六进制。