问题标签 [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++ - 为什么整数类型 int64_t 不能保持这个合法值?
我正在尝试为一些极端情况编写一个测试用例。对于 type 的输入int64_t
,以下行将无法编译:
错误/警告是:
我认为这个数字超出了范围,所以我尝试了:
它输出完全相同的数字!!!所以常数在范围内。
我该如何解决这个错误?
c++ - 插入和提取 numeric_limits::流中的无穷大
以下程序在std::stringstream
使用.double
std::numeric_limits<double>::infinity
现场观看。
输出是
在第 1 部分中,将double
“无穷大”写入 astringstream
并string
从中提取出对应于这种无穷大的“inf”。
然而,在第 2 部分中,子字符串“inf”显然被提取为 0。此外,流似乎处于错误状态,因为连续提取再次给出 0。
类似地,在第 3 部分中,aistream_iterator
用于double
从字符串中提取 s。迭代器在读取“inf”之前到达流的末尾。
double
显然,通过提取单词而不是将它们中的每一个转换为“正常”双精度词或std::numeric_limits<double>::infinity
遇到“inf”时,可以轻松解决问题。然而,这似乎是在重新发明轮子,因为标准库已经包含大量用于从流中提取数据的代码......
- 为什么插入和提取 a 时会有区别
std::numeric_limits<double>::infinity
? - 在标准库中,是否有可能提取
double
也可能是无穷大的 a,而无需编写提取单词并将其转换为 double 的函数?
附加说明
根据 c++ 参考,std::stod和类似函数已经将“inf”转换为无限表达式。因此,看起来std::stringstream::operator<<
不使用std::stod
或类似将一段字符串转换为double
.
c++ - 检查数字类型是否是另一个的子集
我尝试实现一个元函数来检查一个整数类型是否是另一个整数类型的子集。它应该独立于平台,并且至少可以与 C++ 标准定义的所有数字类型一起使用。我当前的实现有 5 个分支。我有两个问题。
- 我会错过任何案例吗?
- 第4个分支是必要的吗?
修复了 intmax_t == long 的实现:
c++ - numeric_limits 在 BOOST_STRONG_TYPEDEF 上是错误的
我假设 BOOST_STRONG_TYPEDEF 定义的类型上的 numeric_limits::max() 会给出与基础类型相同的结果。但是下面的程序表明情况并非如此(用g++或clang++用boost 1.65编译):
结果:
这是预期的结果吗?
c++ - 高于给定值的最小可表达值
给定一个定义为的变量
T x;
哪里T
是通用算术类型(即,这样std::is_arithmetic<T>::value
),是否有一个简单的表达式(例如来自 的东西),std::numeric_limits
其计算结果为可表示的最低值> ?y
T
y
x
(即一种广义增量..)
c++ - 在 Visual Studio 2019 中使用 numeric_limits 的 C++ long double min/max 值错误
使用 Visual Studio Community 2019 v16.4.2 和它在 64 位 Win10 上附带的最新内容。
在测试各种数据类型限制时遇到了一个奇怪的错误,numeric_limits 无法区分 double 和 long double min/max 值。使用带有默认 GNU Mac 工具链的 NetBeans 显示更合理的结果。
控制台输出
c++ - 带有 numeric_limits 的 SFINAE::max() 在 MSVC2017 上
以下代码:
无法在 MSVC2017 上编译(在 gcc/clang 上正常),出现以下错误:
这是我的 SFINAE 的问题,还是 MSVC 中的错误?
注意:使用std::numeric_limits<T>::is_signed
(or std::is_signed<T>::value
) 而不是std::numeric_limits<T>::max()
编译得很好:
c++ - 将数字转换为填充字符串
我正在尝试将数字类型转换为带有前导 '0' 的固定长度字符串表示形式(在只能处理字符串的 GUI 中使用 - 数字的字典排序真的很尴尬)。
与其在需要的地方创建字符串,我认为应该可以制作一个很好的模板供其他人使用,该模板也适用于不同的算术类型。
到现在为止还挺好。它编译,我可以使用它。但:
当我尝试使用它时,我得到了一个惊喜。使用 int32_t 调用此函数
值为 100 的结果是字符串“100”,长度为 3。
我很确定代码库中不存在其他名称如此糟糕的模板(我已经搜索了所有模板以及所有链接库),但我似乎无法理解我生成的代码有什么问题。为了验证代码是否正确,我刚刚将它复制粘贴到它被调用的地方,现在基本上看起来像这样:
现在据我了解,模板“arithmeticToMaxLengthString”以int32_t作为参数的类型调用,这是一个普通的int,其中“numeric_limits::digits10 + 1”给了我10。但是当现在调用这个函数时,数量为说 100 结果不同。
我是否缺少有关模板、enable_if 或 numeric_limits 的内容?模板有何不同(除了明显的 enable_if 之外)?
c++ - 如何在 C++ 中为整数和浮点数找到下一个更大的值?
我天真地尝试过
但是我发现 epsilon 为整数类型返回 0 而不是 1 这似乎是一个疏忽。如何解决上述问题,包括整数?
c++ - 在 c++ 中可以容纳什么最大整数,能够将浮点类型加 1?
假设我float
用来保存整数值并向其添加小位移,大约为 1 秒或 2 秒。哪个值float
会停止变化?这个值的名称是什么?