用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?
解决方法
is
v1
equal tov2
for all unsigned integers?
是的,因为4294967295.0f是二的幂.当除数为2的幂时(假设倒数的计算不会溢出或下溢到零),除法和乘以倒数是相等的.
一般来说,乘法与乘法并不相等,仅在两种权力的特殊情况下.原因是对于(几乎全部)两个y的幂,1 / y的计算是精确的,所以x *(1 / y)只能轮回一次,就像x / y只有一轮一次.
原文地址:https://www.jb51.cc/c/111565.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。