编译时非法使用浮点错误

时间:2015-06-06 08:25:11

标签: c

我在运行下面的程序时收到“非法使用浮点数”的错误。

我该如何解决。

#include<stdio.h>
#include<conio.h>
int main() {
   float x,op;
   printf("enter the value of x");
   scanf("%f",&x);
   op=(x^1/2+x^2/3+x^3/4)/(x^5/2+x^7/2);
   printf("Final Op is %f\n",op);
   return 0;
}

3 个答案:

答案 0 :(得分:3)

在C中,^用作按位XOR运算符。每个操作数应具有整数类型。

6.5.11按位异或运算符:

  

2每个操作数应具有整数类型   4 ^运算符的结果是操作数[...]

的按位异或

您需要标准库函数powf

float powf(float x, float y);  

在您的计划中加入math.h标题。

另请注意,正如@Jens Gustedt 1/2指出的那样,2/33/4都会返回0,因为它们是整数除法。您需要将其更改为1.0/22.0/33.0/4

答案 1 :(得分:0)

在C和相关语言中,^是按位XOR运算符。对于取幂,您需要pow()powf()

变化:

op=(x^1/2+x^2/3+x^3/4)/(x^5/2+x^7/2);

为:

op = (pow(x, 1./2) + pow(x, 2./3) + pow(x, 3./4)) / (pow(x, 5./2) + pow(x, 7./2));

确保#include <math.h>

另外,您可能希望获得一本关于C的好的入门书,并阅读有关运算符和数学库函数的内容。

#include <stdio.h>
#include <math.h>

int main()
{
    float x, op;
    printf("Enter the value of x: ");
    scanf("%f", &x);
    op = (pow(x, 1./2) + pow(x, 2./3) + pow(x, 3./4)) / (pow(x, 5./2) + pow(x, 7./2));
    printf("\nFinal op is %f\n", op);
    return 0;
}

LIVE DEMO

答案 2 :(得分:0)

op表达式有两个问题:

  1. ^不是C中的指数运算符,它是按位XOR和必需的整数操作数。
  2. /的两个操作数都是整数时,则执行整数除法,其截断为最接近零的整数。例如7/2 == 3。您必须使一个或两个操作数浮点执行浮点除法,以便7.0/2.0 == 3.5
  3. #include <math.h>
    
    ...
     op = ( pow( x, 1.0/2.0 ) +
            pow( x, 2.0/3.0 ) +
            pow( x, 3.0/4.0) ) / 
          ( pow( x, 5.0/2.0 ) + 
            pow( x, 7.0/2.0 ) ;
    

    请注意,表达式涉及对float的隐式强制转换。在C89中,数学函数是为double定义的 - 因此无法避免演员表。 C99提供float个变体;例如powf(),C ++重载它们,以便类型由操作数决定;例如pow(7.0f/2.0f)