我正在尝试用 C++ 实现一个简单的抽取算法。我有两个数组,比如 pq ,其中下标通过以下关系相互关联:
p[k] = q[0.5*k] 。这意味着以下序列应该有效:

p[0] = q[0]
p[1] = 0
p[2] = q[1]
p[3] = 0
p[4] = q[2]

等等...

请注意,p[k] 仅在 (0.5*k) 的结果不包含小数位(或十进制为 0)并且不使用任何四舍五入等时才采用值。

我的问题是: 有没有办法区分整数(没有小数位的数字或十进制只有 0 的数字,比如 2.0)和 C++ 中的有小数位的数字,前提是两者都被转换为双倍?

例如)2.0 是一个整数转换为双倍。 2.1 是一个带小数位的数字。
例如。 2) * 0.9*2 应该将 0 放入数组 p 而 0.9*10 应该将 q[9] 放入数组 p.*

如果我使用语句 (int) (0.5*k) ,那么在每种情况下我都会得到一个整数,而不管 k 的值如何。

编辑: 上述情况下的 0.5 只是说明性的。它可以是任何数字,例如 2、2.5、0.9、0.95 等)

任何帮助是最受欢迎的,
谢谢,
斯里拉姆。

最佳答案

假设 coef 可以是其他任何东西,

p[floor(coef*k)] = (fabs(coef*k-floor(coef*k))<1E-6)?q[k]:0;

关于c++ - 区分带小数位的数字(double 类型)和不带小数位的数字 - C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5417752/

10-11 22:07
查看更多