错误:二进制%的操作数无效(有'double'和'double')

时间:2010-10-10 22:05:17

标签: c++ c

我有一个我写的程序,列出了100,000个素数。它适用于10个数字,但在这么多数字之后它们变成负值。我将int更改为long int并且没有改变任何内容,然后我将它们更改为double,我得到标题中列出的错误。我的变量应该是什么?请记住,我仍然是编程的新手。我还查看过一些以前的帖子,但没有看到答案。

 int is_prime(double x,char array[]){
 //doesnt use array but I put it in there

     double j=2;//divider
     for(j=2;j<=pow(x,0.5);j++){
         if((x%j==0)){
             return(0);
         }   //isnt prime  
     }
     return(1);// because it is prime.
 }

3 个答案:

答案 0 :(得分:14)

你不能对运算符使用double,你必须有一个int。

你应该:#include <math.h>然后使用fmod函数。

if(fmod(x,j)==0)

完整代码:

 #include <math.h>
 int is_prime(double x,char array[]){
 //doesnt use array but I put it in there

     double j=2;//divider
     for(j=2;j<=pow(x,0.5);j++){
         if(fmod(x,j)==0){
             return(0);
         }   //isnt prime  
     }
     return(1);// because it is prime.
 }

答案 1 :(得分:4)

您有两种选择:

  1. 坚持使用%运算符,然后您需要将输入转换为int s

    if(((int)x % (int)j) == 0)
    
  2. 包括math.h,然后使用fmod

    if(fmod(x, j) == 0)
    

答案 2 :(得分:0)

您的直接问题可以通过fmod来解决,但是出于高价素数的目的,您可能会更好地查看一个大整数类,比如http://sourceforge.net/projects/cpp-bigint/那样你真正想要的是整数数学,并且随着事情的发展,使用浮点数可能会导致问题。