gpt4 book ai didi

c++ - 为 numeric_limit::max() 指定无限限制?

转载 作者:可可西里 更新时间:2023-11-01 17:53:23 32 4
gpt4 key购买 nike

我有任意精度 Integer类,这很像 Java 的 BigInteger或 OpenSSL 的 BIGNUM在运行中。我无法理解如何表达 numeric_limit<Integer>::max() 的无限限制.

Stack Overflow 有几个问题询问是否可以这样做(例如 Is it ok to specialize std::numeric_limits for user-defined number-like classes? ),以及一些使用原语的示例的答案,但我没有看到使用任意精度整数类的示例。我还访问了std::numeric_limits引用页面,但我不清楚在这种情况下我应该做什么。

在这一点上,我的结论是可以专攻numeric_limit对于我的 Integer ,把它放在标准命名空间中就可以了。我还需要专门化所有 numeric_limits .

如何为 numeric_limit<T>::max() 指定无限限制?


以下来自 GCC 4.2.1 的 <limits> (OS X 机器)。

/// numeric_limits<int> specialization.
template<>
struct numeric_limits<int>
{
static const bool is_specialized = true;

static int min() throw()
{ return -__INT_MAX__ - 1; }
static int max() throw()
{ return __INT_MAX__; }

static const int digits = __glibcxx_digits (int);
static const int digits10 = __glibcxx_digits10 (int);
static const bool is_signed = true;
static const bool is_integer = true;
static const bool is_exact = true;
static const int radix = 2;
static int epsilon() throw()
{ return 0; }
static int round_error() throw()
{ return 0; }

static const int min_exponent = 0;
static const int min_exponent10 = 0;
static const int max_exponent = 0;
static const int max_exponent10 = 0;

static const bool has_infinity = false;
static const bool has_quiet_NaN = false;
static const bool has_signaling_NaN = false;
static const float_denorm_style has_denorm = denorm_absent;
static const bool has_denorm_loss = false;

static int infinity() throw()
{ return static_cast<int>(0); }
static int quiet_NaN() throw()
{ return static_cast<int>(0); }
static int signaling_NaN() throw()
{ return static_cast<int>(0); }
static int denorm_min() throw()
{ return static_cast<int>(0); }

static const bool is_iec559 = false;
static const bool is_bounded = true;
static const bool is_modulo = true;

static const bool traps = __glibcxx_integral_traps;
static const bool tinyness_before = false;
static const float_round_style round_style = round_toward_zero;
};

最佳答案

标准对 max 作了如下说明§18.3.2.4 中的成员函数:

Meaningful for all specializations in which is_bounded != false.

所以你应该制作 is_bounded false并在您的类的文档中指定调用 std::numeric_limits<T>::max 没有意义在上面。

关于c++ - 为 numeric_limit<T>::max() 指定无限限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41303762/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com