问题标签 [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++ - In c++, is it safe to use std::numeric_limits::max() as a special "flag"?
Given
where ind
is 1sorted in ascending order.
I want to do the equivalent of the following:
I came up with this:
This is very fast, but it doesn't feel right to use the std::numeric_limits::max() as a flag in this context.
Of course feelings shouldn't play too much into the equation ... clearly comparing the doubles within the std::remove is safe, and the limit will never occur in practice in this vector in a working application, so it should be ok, no?
Any thoughts on this?
1) Ref comment by the OP. – Alf
c++ - numeric_limits 的 C++11 abs()::分钟();
我正在运行以下
测试.cpp
根据我编译和运行程序的计算机,我得到不同的结果。
要么我得到:
或者我得到:
在后一种情况下, abs() 似乎没有被执行。我想知道是什么导致了这种差异以及我应该如何适应它。我应该以不同的方式计算 abs() 吗?
c++ - cstdint typedefs 可以绑定到 std::numeric_limits 不专门用于某些实现特定类型吗?
是否有可能,至少在理论上,cstdint typedefs 绑定到某些特定于实现的类型 std::numeric_limits 不是专门针对的?
根据http://www.cplusplus.com/reference/limits/numeric_limits,让我引用一下,“ [std::numeric_limits] 专门用于每种基本算术类型,其成员描述类型 T 的属性。此模板不应专门用于任何其他类型。 ”
根据http://en.cppreference.com/w/cpp/types/numeric_limits,让我再次引用,“实现可以为特定于实现的类型提供 std::numeric_limits 的特化”。
“五月”,cppreference 说。所以他们不必这样做。
最后,根据http://www.cplusplus.com/reference/cstdint,标题中定义的 typedef 是“基本整数类型或扩展整数类型的 typedef ”。
因此,总而言之 - 似乎 cstdint typedefs 可能绑定到扩展整数类型(无论它们是什么),它们不是基本的整数类型(同样,无论它们是什么),因此可能与 std::numeric_limits 不兼容。这个对吗?
但是,我链接到的文档在某一点上似乎略有不一致。cplusplus.com 是否禁止 std::numeric_limits 不得专门用于任何非基本算术类型,以反对 cppreference 允许 std::numeric_limits 可能专门用于特定于实现的类型?当然,除非这些特定于实现的类型实际上是 基本的整数类型,在这种情况下,希望 std::numeric_limits 必须专门用于所有 cstdint typedef。
这些文件让我感到困惑。所以我在这里问我的问题:)
编辑。
根据http://eel.is/c++draft/cstdint, cstdint 必须绑定到整数类型。并且根据http://eel.is/c++draft/limits.numeric,“应为每种算术类型提供专门化,包括浮点数和整数,包括 bool ”。整数类型是算术类型,因此 std::numeric_limits 必须专门用于 cstdint typedefs 的理解是否正确?
c++ - 如何与 numeric_limits 进行比较::分钟()
考虑符号 (+1
或-1
) 是已知的,并且有一个解析无符号整数的代码。该无符号整数可以等于-numeric_limits<int64_t>::max()
。如何在不触发未定义行为的情况下正确比较?
c++ - 为模板类定义 numeric_limits max 函数
我在为模板类定义函数 max 时遇到问题。在这个类中,我们不是将数字保留为简单的整数,而是在某些数字系统中作为数字向量。并且通过定义 numeric_limits 我需要返回基于定义的数字系统的最大数字的表示。
当我尝试返回具有最大表示的类时,我遇到了很多错误,但它在返回整数时有效。
我的模板类:
在 .h 文件的末尾我有这个:
我已经用 const 和 constexpr 试过了,但它不起作用。我不知道如何摆脱这个错误:
这就是我主要尝试做的事情:
这是我的作业,所以不要评判这样做的方式,因为这是我老师的选择,我希望我能相当全面地提出我的问题。
c++ - 如何传递大于 std::numeric_limits 的值::max() 到一个函数?
我正在编写一个函数void func(K const& val)
,它是模板类的一部分。
假设我将一个类对象定义为foo<unsigned short int> f;
,然后我将 func 称为f.func(999999);
发生的情况是该值999999
被转换为其他值,因为它本身超出了范围。我该如何防止这种情况发生?代码中是否有编译器标志或其他方式可以防止这种情况发生?
检查
内部func
没有帮助,因为该值在传递时已经转换为数值限制内的值。
例如,999998989898988989999 被转换为 11823
如何将大于 std::numeric_limits::max() 的值传递给函数?
PS 我正在使用 gcc 编译(使用 -std=c++11)
c - 为什么 0 < -0x80000000?
我有一个简单的程序:
条件if(bal < INT32_MIN )
始终为真。这怎么可能?
如果我将宏更改为:
谁能指出这个问题?
c++ - 为什么 INTMAX_MAX 在这里给出错误的结果?
我遇到了一个问题,它要求我找到任何给定顶点对之间最便宜的路径的最大值。我为解决方案实现了 Floyd Warshall 算法。但是我的程序中有一个奇怪的错误。我使用 intmax_t 来避免溢出,但是如果我使用 INTMAX_MAX 而不是 INT_MAX 来表示两个顶点没有直接连接,那么我会得到错误的答案。为什么会这样?
如果我将 INT_MIN 替换为 INTMAX_MIN 并将 INT_MAX 替换为 INTMAX_MAX,则会得到不正确的结果。
示例案例:
使用 INT_MAX:http: //ideone.com/ffmv7P
使用 INTMAX_MAX:http: //ideone.com/vjMCuE
附录:这个程序是专门为解决竞争性编程问题而编写的。请将您的“正确编码实践”建议留给自己。如果您愿意回答,您会发现预处理器指令在这种情况下对可读性造成的影响很小或没有问题。他们在那里是有原因的,我并不愚蠢。如果您没有竞争性编程经验,请不要将责任归咎于我。谢谢。
c++ - 如何在 C++ 中将 const int 设置为最大值?
我有一个静态 const 成员,想将其设置为最大整数。我正在尝试以下操作:
但是得到以下错误:
错误:静态数据成员的类内初始化程序不是常量表达式
有什么解决办法吗?函数如何不返回常量表达式?
编辑:添加 -std=c++11 解决了这个问题。我的室友告诉我,编译器(C++11 之前)不够聪明,无法决定 std::numeric_limits::max() 不会改变其他任何东西,因此不被认为是常量。这可能是这个错误的原因吗?
c++ - 在物理计算中表示无穷大
我目前正在编写一些函数来处理 C++ 中的弹性碰撞。在处理与不可移动物体碰撞的移动物体时,我遇到了一个绊脚石,因为计算要求不可移动物体具有无限质量。
我知道std::numeric_limits
提供,infinity()
但我不确定它在这种情况下是否完全有用,因为据我所知,这只是浮点表示中可能的最大数量。在下面的代码中,如果aabb_obj
质量等于std::numeric_limits<double>::max()
似乎每个使用它的计算都会导致std::numeric_limits<double>::max()
或0
。
这是针对游戏的,因此结果不需要 100% 物理准确,只要“足够好”即可。在此类计算中表示无穷大的推荐方法是什么?我只是选择一个任意高的数字吗?