问题标签 [numeric-limits]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
613 浏览

c++ - GCC 和 MSVC 之间的位数差异 10

我有以下代码:

  • GCC 4.4 返回 19
  • MS VS 9.0 返回 18

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

0 投票
1 回答
409 浏览

c++ - 为什么是 numeric_limit::min/max 不是常数?

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

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

此外,我想知道可以使用哪些技术来利用最小/最大值作为模板参数的一部分,例如:

0 投票
3 回答
1122 浏览

c++ - sizeof 如何对 int 类型起作用?

我有一个小程序比较

(1) sizeof, (2) numeric_limits::digits, (3) 和循环的结果

为了确保它们在任何 C++ 实现上都报告有关“int 类型”大小的相同内容。但是因为我不了解 sizeof 的内部结构,所以我不得不怀疑它是否只是在报告 numeric_limits::digits。谢谢

0 投票
4 回答
1720 浏览

c++ - 对默认参数值使用 numeric_limits

我有一个具有范围参数的模板统计类。

我想设置最大和最小允许值的默认值,但浮点和整数类型的最小值不一样。

通常我可以写

我发现我不能将它用作默认参数

有没有办法实现这样的目标?

0 投票
1 回答
10742 浏览

c++ - 嵌套名称说明符中使用的不完整类型,为什么?

以下代码是固定长度算术类型的一部分,我尽可能地减少它以仅包含问题。

在编译下一行时使用以前的代码,它编译没有问题:

现在我想添加对numeric_limits类的支持,所以我添加了以下代码(这是类的一部分):

编译以下代码时:

gcc 编译器产生以下错误: error: incomplete type 'MathX::int_t<128u, unsigned int, int, long long unsigned int, long long int>::gint' used in nested name specifier.

VC++ 编译器产生以下错误:error C2039: 'comp_c' : is not a member of 'MathX::global_int<t>'.

t当我从类型中删除具有类型的变量声明global_int以及它们的定义时,代码编译没有问题,但我必须保留这些行,我既不能解决这个问题,也不能找出它发生的原因。

0 投票
1 回答
542 浏览

objective-c - objective-c 等效于 c++ numeric_limits::max()

我已经习惯使用 C++ STL 的 numeric_limits 部分来将数值类型(int、float 等)初始化为它们的最大可能值。即 int i=numeric_limits::max()

在objective-c中有与此等效的吗?我在谷歌搜索中看到过使用 INT_MAX 和 FLT_MAX ,但似乎应该有更好的方法。

0 投票
4 回答
7879 浏览

c++ - 为什么 C++ numeric_limits::max() == 0?

下面是一些看起来可行的代码:

但它在 Linux 上的 GCC (4.6.2) 和 clang (2.9) 下都失败了:枚举类型的 max() 实际上为零!即使您使用 C++11 枚举类型说明符明确说明您希望枚举具有什么类型,这仍然是正确的。

为什么是这样?至于 C++11 的行为,是否有明确要求?我在关于强类型枚举的论文 N2347 中没有提到它。

0 投票
1 回答
4882 浏览

c++ - 为什么这段 C++ 代码会出现“非法令牌”编译时错误?

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

...以及 .cpp 文件中的一些代码:

这无法编译,给我:

------ 构建开始:项目:测试,配置:调试 Win32 ------
test.cpp
c:\users\ninja\documents\visual studio 2010\projects\test\test\test.h(10 ): 错误 C2589: '::' : '::'右侧的非法令牌
c:\users\ninja\documents\visual studio 2010\projects\test\test\test.h(10): 错误 C2059: 语法错误:'::'
========== 构建:0 成功,1 失败,0 最新,0 跳过 ==========

有问题的行是定义了 equal() 函数的“eps”参数默认值的行。

谷歌搜索显示人们在 numeric_limits 中的其他函数(即 min() 和 max())也有类似的“非法令牌”错误,但这是由于特定于 Windows 的 c++ 标准库头文件中存在一些#define,它定义了由于某些遗留原因,“min”和“max”。没有提到 epsilon(),我对为什么我在这里遇到错误感到非常困惑。无论如何,将函数名称从“equal”更改为“smartEqual”之类的名称仍然会出现相同的错误,因此名称显然不是问题。什么是?

谢谢!

0 投票
3 回答
1326 浏览

c++ - 用 std::complex 创建复无穷大在 C++ 中

我正在尝试创建一个等于 Inf+Inf*j 的复无穷大,其中 j 是复变量。当我这样做时:

返回复数 (NaN + Inf*j)。

返回复数 (Inf + 0*j)。

还 :

返回复数 (NaN + Inf*j)。

有人知道这里发生了什么吗?每当我尝试将虚部设为无穷大时,就会在实部上写入 NaN。

当然,以上仅适用于支持 NaN 和 Infinity 的类型。我正在使用 g++ v4.6.1。我查看了 numeric_limits 标头,没有迹象表明上述情况应该发生。

为了将上述内容置于上下文中,我实际上是在对复杂的 numeric_limits 进行部分专业化时执行上述操作。非常感谢您考虑这个问题。

对原帖的修订

我提供了一个完整但简短的程序来说明这个问题。我还提供了一些关于如何编译程序以生成结果的更多限定信息。

在 Ubuntu 上使用 -std=c++0x 在 g++ 版本 4.6.1 中编译上述内容,得到以下结果:

如果没有 -std=c++0x 选项,结果是:

所以问题真的是为什么 GNU g++ V4.6.1 在指定 C++0x 时给出它的答案?

对原始帖子的修订 2

我刚刚在 Octave (MATLAB-like numerics package) 中尝试了以下内容:

a=inf + j*inf

答案是:

a = NaN + Infi

这正是我在 C++11 代码 (C++0x) 中看到的。我不知道 Octave 是用什么编译的(我相信它是 C++ 和 FORTRAN 的组合),但如果该包返回我得到的结果,那么我认为这是众所周知的行为。

但是,我查看了 C++11 草案标准,找不到任何关于这种行为的提及。

对原始帖子的修订 3

添加以下行

在为 C++11 编译时,在构建 my_complex_inf 之后返回“正确”答案(inf,inf)。不幸的是,现在这是一个两步过程,我无法在 constexpr 函数中创建这种复杂的无穷大。

0 投票
6 回答
11311 浏览

c++ - 是否可以使用输入流读取无穷大或 NaN 值?

我有一些输入要由输入文件流读取(例如):

-365.269511 -0.356123 -Inf 0.000000

当我使用std::ifstream mystream;从文件中读取到某些

double d1 = -1, d2 = -1, d3 = -1, d4 = -1;

(假设mystream已经打开并且文件有效),

mystream >> d1 >> d2 >> d3 >> d4;

mystream处于失败状态。我希望

std::cout << d1 << " " << d2 << " " << d3 << " " << d4 << std::endl;

输出

-365.269511 -0.356123 -1 -1. 我希望它改为输出-365.269511 -0.356123 -Inf 0

这组数据是使用 C++ 流输出的。为什么我不能做相反的过程(读入我的输出)?如何获得我想要的功能?

来自 MooingDuck:

输入:inf

输出:

另见:http: //ideone.com/jVvei

与此问题相关的还有NaN解析,尽管我没有给出示例。

我在已接受的答案中添加了关于 ideone 的完整解决方案。它还包括对“Inf”和“nan”的配对,这些关键字的一些可能变体可能来自其他程序,例如 MatLab。