高于给定值的最小可表达值

问题描述 投票:4回答:3

给出一个定义为]的变量>

T x;

其中T是通用算术类型(即std::is_arithmetic<T>::value),是否存在一个简单表达式(例如std::numeric_limits中的内容),其求值为y中可表示的最小值T,因此[ C0

y

(即一种广义增量。。]

c++ c++14 typetraits numeric-limits
3个回答
1
投票

x标头的<cmath>将执行此操作。它接受float,double,long double或整数类型,并在其第二个参数的方向上返回下一个值。

所以,给定这样的代码:

std::nexttoward()

如果std::nexttoward()为1.0f,则T my_val = some_input; // float, double, int, etc. T next = std::nexttoward(my_val, std::numeric_limits<T>::max());` 将是1之后的第二大浮点;如果my_val是整数2,则将得到3,依此类推。

((请注意,关于数字溢出,这里有很多不错的打印方法,上面链接的CppReference页面对此进行了讨论。对于它的长短之处,不要在第一个参数中传入next。]


1
投票

您可以使用my_val

请注意,在这里我使用std::numeric_limits<T>::max(),如果您想要有意义的行为以表示无穷大,则可能需要修改代码。

std::nextafter

0
投票
std::nextafter

尽管对此scur3进行鬼混,但指出cmath可以解决浮点值。因此需要一些打字和测试。

© www.soinside.com 2019 - 2024. All rights reserved.