我试图在c++中实现一个简单的抽取算法。我有两个数组,比如p
& q
,其中下标通过以下关系相互关联:
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应将q9放入数组p。
如果我使用语句(int) (0.5*k)
,那么在每种情况下我都会得到一个整数,而不管k的值如何。
编辑:在上述情况下, 0.5只是说明性的。它可以是任何数字,例如2,2.5,0.9,0.95等)
任何帮助都是最受欢迎的,
谢谢,
斯里拉姆。
发布于 2011-03-24 02:47:02
假设主厨可以是其他任何东西,
p[floor(coef*k)] = (fabs(coef*k-floor(coef*k))<1E-6)?q[k]:0;
发布于 2011-03-24 02:32:21
假设k
是整数类型,您可以使用if (k % 2 == 0) ...
检查k
是否可以被二除:
if (k % 2 == 0)
p[k] = q[k / 2];
else
p[k] = 0;
这也可以用三元运算符来表示:
p[k] = (k % 2 == 0) ? q[k / 2] : 0;
发布于 2011-03-24 02:35:09
您想要做的事情的简短语法可以是:
p[k] = k % 2 ? 0 : q[k/2];
在C++中有区分整数和整数的方法吗?
定义整数,并在此上下文中定义整数。我很困惑!
你是否接受了解释这里?的差异?
如果要检测数字是否为整数,则这可能会有所帮助:
#include<cmath>
bool IsInteger(double d)
{
double intpart;
return std::modf(double number, &intpart) == 0.0;
}
https://stackoverflow.com/questions/5417752
复制相似问题