gpt4 book ai didi

c++ - 什么操作可以使 float 离开 [0, 1] 范围?

转载 作者:行者123 更新时间:2023-12-03 06:49:43 24 4
gpt4 key购买 nike

我经常和 float 一起工作或 double [0, 1] 范围内的类型。我知道浮点运算是不精确的,所以我通常会限制我的值,以便在运算之前/之后保证它们在这个范围内。
在某些情况下,我依赖浮点数甚至不是轻微的负值,而是完全<= 1 ,使这成为必要。
例如,在这些功能中的任何一个中是否有必要:

// x and y are guaranteed to be in [0, 1]
float avg(float x, float y) {
// the average of [0, 1] values should always be in [0, 1]
return std::clamp<float>((x + y) / 2, 0, 1);
}

float mul(float x, float y) {
// the product of [0, 1] values should always be in [0, 1]
return std::clamp<float>(x * y, 0, 1);
}

float pow(float x, unsigned y) {
// raising an [0, 1] value to any unsigned power should also result in an [0, 1] value
return std::clamp<float>(std::pow(x, y), 0, 1);
}
算术运算何时可以使浮点数离开 [0, 1] 范围,是否有任何一致的规则?

最佳答案

如果可以,请将此答案限制为 IEEE754。0 , 1 , 和 2都可以精确地表示为 float .算术运算符需要返回可能的最佳浮点值。自 xy都不大于 1,它们的总和不能大于 2,否则会有更好的 float为总和。换句话说,两个之和 float s 比 1 少一点不能大于 2 .
这同样适用于产品。
第三个需要夹具,因为不能保证 std::pow(x, y)返回最好的 float .

关于c++ - 什么操作可以使 float 离开 [0, 1] 范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63742682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com