标签: numeric-limits

高于指定值的最小可表示值

给定一个变量定义为

T x;

其中T是一个通用的算术类型(即,使得std::is_arithmetic<T>::value),有一个简单的表达式(例如,从某事std::numeric_limits),用于评估到最低值y表达中T,使得y> x

(即一种广义增量。。)

c++ type-traits numeric-limits c++14

4
推荐指数
1
解决办法
70
查看次数

模板和std :: numeric_limits

我有一个名为Atomic的类,它基本上是一个_Atomic_word调用gcc原子内置函数的加法方法.

class Atomic{
    mutable volatile _Atomic_word value_;
public:
    Atomic(int value = 0): value_(value) {}
    **** blah blah ****
};
Run Code Online (Sandbox Code Playgroud)

我想std::numeric_limits<Atomic>实例化std::numeric_limits<underlying integer type>(例如在我的系统_Atomic_word上只是int的typedef).

有没有办法做到这一点?

c++ templates numeric-limits

3
推荐指数
1
解决办法
446
查看次数

为什么对于volatile类型,std :: numeric_limits :: is_integer为false?

std::numeric_limits<volatile int>::is_integer
Run Code Online (Sandbox Code Playgroud)

评估为"假".

但为什么?不是volatile int仍然是整数类型?我想知道这里是否有某种深刻的含义.

UPD:编译器是来自Keil 4.72的armcc

c++ std volatile numeric-limits

3
推荐指数
1
解决办法
187
查看次数

为什么numeric_limit <T> :: min/max不是常量?

可能重复:
为什么std :: numeric_limits <T> :: max()是一个函数?

我想知道是否有人可以解释为什么背后的原因std::numeric_limit<T>::min并且max是函数而不是常量?

此外,我想知道可以使用哪些技术将min/max值用作模板参数的一部分,例如:

template<unsigned long long max>
class foo
{
public:
   void boo() { std::cout << max << std::endl; }
};

.
.
.

foo<std::numeric_limits<int>::max()> f;
f.boo();
Run Code Online (Sandbox Code Playgroud)

c++ numeric-limits

2
推荐指数
1
解决办法
402
查看次数

numeric_limits::max 和“从 'int (*)()noexcept (true)' 到 'value_t {aka int}' 的无效转换”

我有一个使用定义的类型typedef unsigned int value_t;和一个函数

value_t find_minimal_value(...) {
    ...
    if(...) return numeric_limits<value_t>::max;
    ...
}
Run Code Online (Sandbox Code Playgroud)

编译器拒绝编译它,说:从 'int (*)()noexcept (true)' 到 'value_t {aka int}' 的无效转换。

这是什么意思?查看 numeric_limits 类,该min()函数应该返回一个通过模板 typename 传递给它的类型的变量,所以value_t在这种情况下。那么为什么代码不能编译?

c++ templates return-type type-conversion numeric-limits

2
推荐指数
1
解决办法
459
查看次数

获取按位不为零的无符号整数的最大值

我正在尝试获取某个无符号整数类型的最大值,而不包含任何像<limits>. 所以我想我只是翻转无符号整数值 0 的位。

#include <iostream>
#include <limits>

int main()
{
    std::cout << (~0U) << '\n'; // #1
    std::cout << (std::numeric_limits< unsigned >::max()) << '\n'; // #2
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我对这些之间的细微差别不是很有经验。这就是为什么我要问使用第一种方法是否会发生某些意外行为或某些平台/架构问题。

c c++ bit-manipulation numeric-limits

2
推荐指数
1
解决办法
1002
查看次数

什么可以使用std :: numeric_limits <double> :: epsilon()?

  unsigned int updateStandardStopping(unsigned int numInliers, unsigned int totPoints, unsigned int sampleSize)
    {
        double max_hypotheses_=85000;
        double n_inliers = 1.0;
        double n_pts = 1.0;
        double conf_threshold_=0.95

        for (unsigned int i = 0; i < sampleSize; ++i)
        {
            n_inliers *= numInliers - i;//n_linliers=I(I-1)...(I-m+1)
            n_pts *= totPoints - i;//totPoints=N(N-1)(N-2)...(N-m+1)
        }
        double prob_good_model = n_inliers/n_pts;

        if ( prob_good_model < std::numeric_limits<double>::epsilon() )
        {
            return max_hypotheses_;
        }
        else if ( 1 - prob_good_model < std::numeric_limits<double>::epsilon() )
        {
            return 1; 
        }
        else 
        {
            double nusample_s = log(1-conf_threshold_)/log(1-prob_good_model);
            return …
Run Code Online (Sandbox Code Playgroud)

c++ std numeric-limits

2
推荐指数
1
解决办法
3005
查看次数

C++ 为什么数字限制对 uint8_t 和 int8_t 不起作用?

我最近注意到 numeric_limits::max() 和 numeric_limits::min() 似乎不适用于 uint8_t 和 int8_t。这是有原因的还是可能是错误?我在自己的电脑上使用 gcc 编译器尝试过:

#include <iostream>
#include <limits>

using namespace std;

int main()
{

    std::cout << "numeric_limits<uint8_t>::max() = " << numeric_limits<uint8_t>::max() << std::endl; 
    std::cout << "numeric_limits<int8_t>::max() = " << numeric_limits<int8_t>::max() << std::endl; 
    std::cout << "numeric_limits<int8_t>::min() = " << numeric_limits<int8_t>::min() << std::endl;

    std::cout << "numeric_limits<uint16_t>::max() = " << numeric_limits<uint16_t>::max() << std::endl; 
    std::cout << "numeric_limits<int16_t>::max() = " << numeric_limits<int16_t>::max() << std::endl; 
    std::cout << "numeric_limits<int16_t>::min() = " << numeric_limits<int16_t>::min() << std::endl; 

    std::cout << "numeric_limits<uint32_t>::max() = " << …
Run Code Online (Sandbox Code Playgroud)

c++ numeric-limits

2
推荐指数
1
解决办法
1263
查看次数

std :: numeric_limits作为条件

有没有办法可以使用std::numeric_limits<T>::is_integerstd::numeric_limits<T>::is_specialized更改模板行为?

例如,我可以这样做:

template < typename T >
void foo( const T& bar )
{
    if( std::numeric_limits< T >::is_integer )
    {
        isInt( bar );
    }
    else if( std::numeric_limits< T >::is_specialized )
    {
        isFloat( bar );
    }
    else
    {
        isString( bar );
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ templates numeric-limits c++11

1
推荐指数
1
解决办法
679
查看次数

C++ 中 numeric_limits&lt;streamsize&gt;::max() 的值

cin.ignore()在 C++ 中使用时,它需要一个字符数的参数来消耗,直到出现分隔符。我经常观察到以下内容被使用cin.ignore(numeric_limits<streamsize>::max(), '\n');

我很想知道 的价值,numeric_limtis<streamsize>::max()所以我只是输出了它的价值,它变成了一个巨大的价值 9223372036854775807 。如果它代表字符数,那么它可以以字节为单位考虑,如果这是真的,这不是一个非常大的值超过我的硬盘空间。

有人能告诉我它到底是什么,为什么这么大的价值?

c++ byte numeric-limits

1
推荐指数
1
解决办法
1747
查看次数