问题标签 [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.
c++ - GCC 和 MSVC 之间的位数差异 10
我有以下代码:
- GCC 4.4 返回 19
- MS VS 9.0 返回 18
有人可以解释为什么两者之间有区别吗?无论编译器如何,我都希望这样的常量是相同的。
c++ - 为什么是 numeric_limit::min/max 不是常数?
我想知道是否有人可以解释为什么是函数而不是常量的std::numeric_limit<T>::min
原因max
?
此外,我想知道可以使用哪些技术来利用最小/最大值作为模板参数的一部分,例如:
c++ - sizeof 如何对 int 类型起作用?
我有一个小程序比较
(1) sizeof, (2) numeric_limits::digits, (3) 和循环的结果
为了确保它们在任何 C++ 实现上都报告有关“int 类型”大小的相同内容。但是因为我不了解 sizeof 的内部结构,所以我不得不怀疑它是否只是在报告 numeric_limits::digits。谢谢
c++ - 对默认参数值使用 numeric_limits
我有一个具有范围参数的模板统计类。
我想设置最大和最小允许值的默认值,但浮点和整数类型的最小值不一样。
通常我可以写
我发现我不能将它用作默认参数
有没有办法实现这样的目标?
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
以及它们的定义时,代码编译没有问题,但我必须保留这些行,我既不能解决这个问题,也不能找出它发生的原因。
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 ,但似乎应该有更好的方法。
c++ - 为什么 C++ numeric_limits::max() == 0?
下面是一些看起来可行的代码:
但它在 Linux 上的 GCC (4.6.2) 和 clang (2.9) 下都失败了:枚举类型的 max() 实际上为零!即使您使用 C++11 枚举类型说明符明确说明您希望枚举具有什么类型,这仍然是正确的。
为什么是这样?至于 C++11 的行为,是否有明确要求?我在关于强类型枚举的论文 N2347 中没有提到它。
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”之类的名称仍然会出现相同的错误,因此名称显然不是问题。什么是?
谢谢!
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 函数中创建这种复杂的无穷大。
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。