【发布时间】:2023-03-14 21:20:01
【问题描述】:
与float a = ...; 和float inva = 1/a; 是x / a 相同x * inva?
这个案子是怎么回事:
unsigned i = ...;
float v1 = static_cast<float>(i) / 4294967295.0f;
float scl = 1.0f / 4294967295.0f;
float v2 = static_cast<float>(i) * scl;
对于所有无符号整数,v1 是否等于 v2?
【问题讨论】:
-
这里的第一个答案可能会为您提供一些信息:stackoverflow.com/questions/22621241/…
-
@devnull: 该站点已死。
-
不是重点,但
4294967295.0f甚至不能表示为浮点数。 -
@MatthieuM。这是一个浮动。两个浮点数,如
x / y == x * (1 / y),通常只产生不到 2^64 种可能性,除非您可以争辩说不需要研究大多数指数,在这种情况下,您最终可能会得到几乎不实用的 2^46 种可能性。 -
@Michael Walz 我也无法处理 32 位
unsigned的失败案例。甚至尝试将unsigned作为 64 位 - 到目前为止没有失败。 (这是 OP 的第二种情况)
标签: c++ c floating-point