标签: numeric-limits

为什么标准同时提供is_integer和is_exact?

std::numeric_limits 提供2个互斥的常量:

  • is_integer :" true对于所有整数算术类型T"

  • is_exact:" true对于T使用精确表示的所有算术类型"

是否存在非精确积分类型的可能性?在这里试图允许什么?

在我所有的模板中,我知道我是否正在处理精确的数字,我用过is_integer,我现在还需要添加支票is_exact吗?

c++ floating-point integer fixed-point numeric-limits

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

GCC和MSVC之间的数字10的差异

我有以下代码:

#include <iostream>
#include <limits>

int main()
{
   std::cout << std::numeric_limits<unsigned long long>::digits10 << std::endl;
   return 0;
}
Run Code Online (Sandbox Code Playgroud)
  • GCC 4.4返回19
  • MS VS 9.0返回18

有人可以解释为什么两者之间有区别?无论编译器如何,我都希望这样的常量是相同的.

c++ gcc digits visual-c++ numeric-limits

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

为什么我用这段C++代码得到"非法令牌"编译时错误?

在我的应用程序(在Visual C++ 2010下编译)中,我在头文件中有这样的代码:

// example.h
#pragma once

#include <limits>

namespace myspace
{

// A generic equality test
template<typename T> inline bool equal(
    const T &v1, 
    const T &v2, 
    const T &eps = std::numeric_limits<T>::epsilon())
{
    return (v1 == v2);
}

// Template specialization for floating-point numbers
template<> bool equal<float>(
    const float &v1, 
    const float &v2, 
    const float &eps);

// A generic equality test for finite-precision real number representations (with epsilon)
template<typename T> inline bool realEqual(
    const T &p, 
    const T &q, …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-errors visual-studio numeric-limits

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

我应该使用numeric_limits还是C限制宏?

我是SO的新手,这是我的第一个问题,但我已经阅读了规则,我希望我不会破坏它们中的任何一个.

我最近开始学习编程,并选择C++作为我的第一语言.今天我已经到了需要帮助才能做出正确决定的地步.我正在学习第六版C++ Primer Plus,到目前为止,作者只介绍了C宏,并且没有说过关于numeric_limits模板的一个单词(至少我认为它是一个模板),我从互联网上学到了我的好奇心.

所以,现在我有点迷失,因为如果我理解正确,numeric_limits是一种检查C++类型限制的现代方法,因为它易于扩展.此外,C宏中的AFAIK没有像char16_t这样的C++ 11类型的定义.

虽然只搜索我发现的那个问题,但提供的答案虽然有用,但不幸的是他们没有回答对我来说特别有趣的事情.实际上他们大多都很老了.

现在,具体问题:

基于对代码执行速度的需求,未来的安全性和实用性(我不太关心简单性)是否更好的想法使用那些旧的C宏,还是应该考虑我提到的方面坚持使用numeric_limits

请原谅我英语中的任何错误.这不是我的母语.

c++ numeric-limits c++11

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

在numeric_limits中有错误还是我只是困惑?

至少在我自己的脑海中,我遇到了一些奇怪的行为,同时调试了一些涉及确定添加操作是否会使double下溢的代码.这是一个展示我发现的示例程序.

#include <iostream>
#include <limits>

using std::cout;
using std::endl;
using std::numeric_limits;

int main()
{
    double lowest = numeric_limits<double>::lowest();
    bool truth = (lowest + 10000) == lowest;
    cout << truth << endl;
}
Run Code Online (Sandbox Code Playgroud)

当我执行此代码时,我得到了结果.这是一个错误还是我只是被剥夺了睡眠?

c++ double numeric-limits

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

浮点数的小数部分中的最大基数为10的数字是多少

如果可以输出一个浮点数,以便没有截断值(比如说setpercision),并且数字以固定的表示法输出(比方说fixed),保证整个小数部分所需的缓冲区大小是多少.浮点数可以存储在缓冲区中吗?

我希望标准中有#define一些东西numeric_limits可以告诉我浮点类型的小数部分的最大基数为10的位置.

我在这里询问浮点类型的小数部分中的最大基数为10的数字:浮点数的积分部分中的最大基数为10的数字是多少

但我意识到这可能会更复杂.例如,1.0 / 3.0是一系列无限重复的数字.当我使用fixed格式输出时,我会在重复0之前得到这么多地方:

0.333333333333333314829616256247390992939472198486328125

但我不一定能说这是最大精度,因为我不知道有多少尾随0实际上是在浮点的分数中表示的,并且它没有被负指数向下移动.

我知道我们min_exponent10应该为此寻找什么?

c++ floating-point decimal max numeric-limits

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

是否有浮点指数偏差的规范?

IEEE浮点指数存储为无符号整数,使用预定义的指数偏差来抵消指数.

该指数偏见似乎始终等于numeric_limits<T>::max_exponent - 1其中T是浮点类型.

我没有任何文档表明这总是正确的,但我当然对非IEEE浮点格式没有任何想法.

这必须为以下功能所知:

难道有一个规范,或者我必须承担numeric_limits<T>::max_exponent - 1

c++ floating-point unsigned exponent numeric-limits

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

在一个封闭的范围内循环

你会如何修复这段代码?

template <typename T> void closed_range(T begin, T end)
{
    for (T i = begin; i <= end; ++i) {
        // do something
    }
}
Run Code Online (Sandbox Code Playgroud)
  • T被约束为整数类型,可以是更广泛的类型,可以是有符号或无符号的

  • beginnumeric_limits<T>::min()

  • end可以numeric_limits<T>::max()(在这种情况下++i会溢出上面的代码)

我有几种方式,但我不喜欢.

c++ overflow numeric-limits

4
推荐指数
2
解决办法
341
查看次数

为什么C++没有将INT_MIN定义为(1 << 31)

我理解为什么C++将INT_MIN定义为(-2147483647-1),但为什么它们不使用1 << 31?这样可以防止溢出并且易于理解.

c++ numeric-limits

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

c++ 中 &lt;climits&gt; 和 &lt;limits&gt; 头文件有什么区别?

Limits 是 C++ 中的头文件,由numeric_limitsclass组成,而 climits 是仅由各种数据类型的最小值和最大值组成的头文件。

可以在任何想要使用 climits 的地方使用限制,但与此相反的是不正确的。

因此,何时建议使用 climits 以及何时使用限制?

c++ limit numeric-limits c++11

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