Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
区分带小数点的数字(双精度类型)和不带-c+的数字+; 我尝试在C++中实现一个简单的抽取算法。我有两个数组,比如p和q,其中下标通过以下关系相互关联:_C++_Integer_Double_Rounding - Fatal编程技术网

区分带小数点的数字(双精度类型)和不带-c+的数字+; 我尝试在C++中实现一个简单的抽取算法。我有两个数组,比如p和q,其中下标通过以下关系相互关联:

区分带小数点的数字(双精度类型)和不带-c+的数字+; 我尝试在C++中实现一个简单的抽取算法。我有两个数组,比如p和q,其中下标通过以下关系相互关联:,c++,integer,double,rounding,C++,Integer,Double,Rounding,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)且不使用任何四舍五入等时才采用值 < >强>我的问题是:< /St>有没有一种方法来区分整数(一个没有小数位数的数字,或者只有0个十进制,比如2个)和一个带有小数位数的C++,如果两者都被转换成双?p> 2.0是一个转换为双精度的整数

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)且不使用任何四舍五入等时才采用值

< >强>我的问题是:< /St>有没有一种方法来区分整数(一个没有小数位数的数字,或者只有0个十进制,比如2个)和一个带有小数位数的C++,如果两者都被转换成双?p> 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等。)

欢迎任何帮助,
谢谢,

Sriram.

假设
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;
p[k] = (k%2) ? 0 : q[k/2];

除非你的表达式会导致无理数,否则你可以用它来表示你的独立性。

你想做的简短语法可以是:

p[k] = k % 2 ? 0 : q[k/2];

有没有一种方法可以区分C++中的整数和整数?< /P> 定义整数,并在此上下文中定义整数。我糊涂了

你是否正在考虑所解释的差异

如果要检测某个数字是否为整数,则这可能会有所帮助:

#include<cmath>

bool IsInteger(double d)
{  
    double intpart;
    return std::modf(double number, &intpart) == 0.0;
}
#包括
布尔·伊森特格(双d)
{  
双内点;
返回std::modf(双倍数字,&intpart)==0.0;
}

@Aix对
k%2
的建议似乎与
?:
操作符结合得很好:

p[k] = (k % 2 == 0) ? q[k / 2] : 0;
p[k] = (k%2) ? 0 : q[k/2];

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

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

p[floor(coef*k)]=(fabs(coef*k-floor(coef*k))k%2在这个线程中有几个答案

但是,这在回答OP的问题时没有用处。请注意编辑: 编辑:上述情况下的0.5只是说明性的。它可以是任何数字,例如2、2.5、0.9、0.95等)

k%2仅起作用,因为选择的值为0.5。它对任何其他值都不适用

因此,除非我完全遗漏了什么,否则我能想到的最简单方法是:


从数字本身中减去数字的下限。如果结果大于0,它就不是整数。

为什么不使用整数除法?另外,在数学中如何区分整数和整数?@Johnsyweb,可能是因为
4/2
5/2
都将返回
2
,当
5/2
发生故障时,Sriram知道如何将
0
填充到
p[5]
中。您的数组是由int组成的吗?如果结果不同于0,您不能只使用模(%2)而不执行任何操作吗?整数和整数之间的差异是什么?谢谢您的输入。我已将问题如上所述进行了编辑。希望它更清楚我可能弄乱了问题的早期版本。请查看已编辑的问题,如果您还有问题,请告诉我。如果
d>LONG\u MAX
,您的IsInteger功能将严重失败。更好的解决办法是使用
std::modf
(in)。@James:我心里有这个想法,但不知道如何解决。不管怎样,我现在按照你的建议试了一下。请查看并让我知道它是否正确!ITYM
p[k]=(k%2)?0:q[k/2]?如果表达式可以更改为将结果与1(<1.0)进行比较,我认为这就是答案,对吗?你认为?(coefk floor(coefk))是coef*k的分数部分。除了0.5之类的,它永远也不会是0,因为精度有限。这就是为什么我将其与1E-6 ie 0.000001进行比较——没有必要检查double是否等于某个值。