ash*_*him 16 c++ double infinity
问题是关于在C++中为double数据类型建模无穷大.我需要在头文件中,所以我们不能使用像numeric_limits.
是否有定义的常量代表最大值?
Lal*_*and 24
浮点数(例如双精度数)实际上可以保持正无穷大.常量INFINITY应该在math.h标题中.
去标准潜水,发现文字:
4宏INFINITY扩展为float类型的常量表达式,表示正无穷大或无符号无穷大(如果可用); 否则为float类型的正常量,在转换时溢出.
在节中 7.12 Mathematics <math.h>
那么当然你有辅助函数isinf来测试无穷大(也在math.h中).
7.12.3.3 isinf宏
int isinf(real-floating x);
描述:isinf宏确定其参数值是无穷大(正数还是负数).首先,以比其语义类型更宽的格式表示的参数被转换为其语义类型.然后确定基于参数的类型.
返回:当且仅当其参数具有无限值时,isinf宏才返回非零值.
bam*_*s53 21
numeric_limits函数都是constexpr,因此它们可以正常工作作为编译时常量(假设您正在使用当前版本的C++).所以std::numeric_limits<double>::infinity()应该在任何情况下工作.
即使您使用的是旧版本,这仍然适用于您不需要编译时常量的任何地方.从您的问题中不清楚您的使用是否确实需要编译时间常数; 只是在标题中并不一定需要它.
如果您使用的是旧版本,并且确实需要编译时常量,则INFINITYcmath中的宏应该适合您.它实际上是float无穷大的值,但它可以转换为a double.
不知道为什么你不能在头文件中使用std :: numeric_limits.但是这也是从ANSI C继承的:
#include <cfloat>
DBL_MAX
Run Code Online (Sandbox Code Playgroud)