首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >参数需要双精度,但我需要浮点数?

参数需要双精度,但我需要浮点数?
EN

Stack Overflow用户
提问于 2017-02-09 09:37:21
回答 1查看 149关注 0票数 0

我正在写一个二次方程的根求解器。我要么得到%f期望的参数类型double,而参数2和3在45和51行有类型float,要么在编译时得到-nan和-inf作为答案。我想不出还有什么别的办法能让它工作。我不能在这上面用替身。子程序只包含浮点数和整型数。

代码语言:javascript
复制
#include <stdio.h>
#include <math.h>

void solve_linear(int, int);
void solve_quad(int, int, int);
void solve_real(int,int, int);
void solve_complex(int, int, int);

int main (int argc, char *argv[]){
    int a, b, c;

    if (argc==4) {
        sscanf(argv[1], "%d", &a);
        sscanf(argv[2], "%d", &b);
        sscanf(argv[3], "%d", &c);
        if (a=0){
            if (b=0){
              printf("Error. A and B cannot both be 0\n");
            }
            else solve_linear(b, c);
        }
        else solve_quad(a,b,c);
    }
    else printf("Error. Must enter 3 numbers on command line.\n");
}

void solve_linear(b, c){
    float root;
    root=(float)-c/b;
    printf("%f\n", root);
}

void solve_quad(a, b, c){
    if(b*b-4*a*c<0){
        solve_complex(a,b,c);
    }
    else{
        solve_real(a, b, c);
    }
}
void solve_real(a, b, c){
      float x1, x2;
      x1=(-b+sqrt(b*b-4*a*c))/(2*a);
      x2=(-b-sqrt(b*b-4*a*c))/(2*a);
      printf("%f, %f\n", &x1, &x2);
}
void solve_complex(a, b, c){
    float x_real, x_img;
    x_real=-b/(2.0*a);
    x_img=(sqrt(abs(b*b-4*a*c)))/(2*a);
    printf("%f + %fi\n", &x_real, &x_img);
}
EN

回答 1

Stack Overflow用户

发布于 2017-02-09 14:25:01

一旦调用printf,所有的浮点参数都会自动转换为双精度。你不能阻止这一点。

启用编译器的警告,它们会告诉你printf需要的是直接值而不是指针,所以代码应该是printf("%f +%f = %f\n", a, b, a + b);

这就是不同之处: scanf需要指针(因为它写入变量),pintf只需要值本身(所以不需要指针)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42126783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档