float 和 double 数据类型在 gcc 编译器中工作吗?
Does float and double datatype work in gcc compilers?
我已经为以下程序编写了代码,但输出似乎有误。
题:
https://www.hackerrank.com/challenges/plus-minus
代码:
#include <stdio.h>
int main() {
int N,num,i,cp=0,cn=0,cz=0;
double fp,fn,fz;
scanf("%d",&N);
for(i=0;i<N;i++)
{
scanf("%d",&num);
if(num>0)
cp=cp+1;
else if(num==0)
cz=cz+1;
else
cn=cn+1;
}
fp=cp/N;
fn=cn/N;
fz=cz/N;
printf("%lf\n%lf\n%lf",fp,fn,fz);
return 0;
}
输出结果为:
0.000000
0.000000
0.000000
为了获得正确的结果 cast
这些表达式为 double
-
like this
fp=cp/N; // fp=(double)cp/N;
fn=cn/N; // fn=(double)cn/N;
fz=cz/N; // fz=(double)cz/N;
在前面的例子中,如果 cp(or cn or cz)
小于 N
那么由于整数除法你将得到 0
(小数部分将被丢弃)。因此 m 这些演员表。
另一种方法是将所有变量用作 double
.
您正在进行整数除法,它只会产生整数结果。如果要计算浮点数结果需要进行浮点数除法
int a = 1;
int b = 3;
int c = a / b;
// c 现在是 0 -> 整数除法
double i = 1.0;
double j = 3.0;
double k = i / j;
// k 现在是 0.3333333 -> 浮点除法
说明:
fp=cp/N;
fn=cn/N;
fz=cz/N;
作为整数除法执行。
将您的代码更改为:
fp=(double)(cp)/(double)(N);
fn=(double)(cn)/(double)(N);
fz=(double)(cz)/(double)(N);
我已经为以下程序编写了代码,但输出似乎有误。 题: https://www.hackerrank.com/challenges/plus-minus
代码:
#include <stdio.h>
int main() {
int N,num,i,cp=0,cn=0,cz=0;
double fp,fn,fz;
scanf("%d",&N);
for(i=0;i<N;i++)
{
scanf("%d",&num);
if(num>0)
cp=cp+1;
else if(num==0)
cz=cz+1;
else
cn=cn+1;
}
fp=cp/N;
fn=cn/N;
fz=cz/N;
printf("%lf\n%lf\n%lf",fp,fn,fz);
return 0;
}
输出结果为:
0.000000
0.000000
0.000000
为了获得正确的结果 cast
这些表达式为 double
-
like this
fp=cp/N; // fp=(double)cp/N;
fn=cn/N; // fn=(double)cn/N;
fz=cz/N; // fz=(double)cz/N;
在前面的例子中,如果 cp(or cn or cz)
小于 N
那么由于整数除法你将得到 0
(小数部分将被丢弃)。因此 m 这些演员表。
另一种方法是将所有变量用作 double
.
您正在进行整数除法,它只会产生整数结果。如果要计算浮点数结果需要进行浮点数除法
int a = 1;
int b = 3;
int c = a / b;
// c 现在是 0 -> 整数除法
double i = 1.0;
double j = 3.0;
double k = i / j;
// k 现在是 0.3333333 -> 浮点除法
说明:
fp=cp/N;
fn=cn/N;
fz=cz/N;
作为整数除法执行。
将您的代码更改为:
fp=(double)(cp)/(double)(N);
fn=(double)(cn)/(double)(N);
fz=(double)(cz)/(double)(N);