相同的值可能乘以另一个数字(及其多重数)会变成不同的值吗?

问题描述 投票:0回答:1

给定一个值(即44100.0f)并乘以另一个(或其倍数)(即1/8 = 2/16)是否会给出不同的值?

示例:

44100.0 * 1/8 != 44100.0 * 2/16

44100.0 * 1/8 != 44100 * 2 / 16

这是因为我做这样的事情:

float patternLength = 44100.0f;
float steps = 8.0f;
float position = 1.0f;

float stepLength = patternLength / steps;
int result = (int)std::round(position  * stepLength);

这给出5513(因为它将5512.5舍入为5513),但是如果结果是5512,4999999怎么办?它将四舍五入到5512

这是我的麻烦:无论乘数(及其倍数)如何,我都必须确保它们采用相同的值。

我需要在回合前加总某种EPSILON吗?还是Floating Point Math可以开箱即用地向我保证?

c++ floating-point rounding
1个回答
0
投票

IEEE754答案

IEEE754浮点规范要求返回最接近算术运算的浮点值。

因此1/8与2/16相同。

当然,我假设分子和分母都可以精确表示,可以是小的整数。

一般回答

通常,C ++浮点确实做到这一点。

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