繁体   English   中英

C++中0-x和-x的区别

[英]difference between 0-x and -x in c++

我正在做 ACM,但出现了一个问题。 我只想知道为什么在使用part1 = (-b)/ (2 * a);时它是错误的答案part1 = (-b)/ (2 * a); ,但在使用part1 = (0-b)/ (2 * a);时被接受part1 = (0-b)/ (2 * a);

#include <cstdio>
#include <cmath>
int main()
{
    int n;
    scanf("%d",&n);
    while(n--){
        double a,b,c;
        double pd;
        double part1,part2;
        scanf("%lf %lf %lf",&a,&b,&c);
        if (a < 0){
                    a = 0 - a;
                    b = 0 - b;
                    c = 0 - c;
                }
        pd=b*b-4*a*c;
        part1 = (0-b)/ (2 * a);
        if(pd>0){
            part2 = sqrt(pd)/(2 * a);
            printf("x1=%.5lf;x2=%.5lf\n",part1+part2,part1-part2);
        }else if(fabs(pd)<1e-8){
            printf("x1=x2=%.5lf\n",part1);
        }else{
            part2 = sqrt(-pd)/ (2 * a);
            printf("x1=%.5lf+%.5lfi;x2=%.5lf-%.5lfi\n",part1,part2,part1,part2);
        }
    }
    return 0;
}

输入:

3

1.0 3.0 1.0

2.0 -4.0 2.0

1.0 2.0 8.0

输出:

x1=-0.38197;x2=-2.61803

x1=x2=1.00000

x1=-1.00000+2.64575i;x2=-1.00000-2.64575i

而源码问题在这里: http : //bailian.openjudge.cn/practice/2707/

如果我翻译了那个页面,就会看到这个关于 Java 的注释,但据说这同样适用于 C++ 解决方案:

注意在用Java做这个问题的时候,可能会出现x1或者x2为-0的情况,这时候需要去掉负号。

-x0-x在 IEEE-754 中可能不同,如果x0.0

  • -x将为-0.0
  • 0-x将是0.0

注意不同的符号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM