Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我写了一个程序,将所有素数打印到给定的一个数 #包括 浮动绝对值(浮动a) { 如果(a=e) { g2=(g1+x1/g1)/2.0; g1=x1/g2; } sr=(int)g1; 返回(sr); } int main() { int-num; //num=0; printf(“输入一个介于1和1000之间的数值”); scanf(“%d”和&num); //printf(“你好”); int标志; flag=0; int i; i=2; int m,j; m=j=0; while(i3) { m=sqert(i); 对于代码中的(j=2;j_C_Primes - Fatal编程技术网

我写了一个程序,将所有素数打印到给定的一个数 #包括 浮动绝对值(浮动a) { 如果(a=e) { g2=(g1+x1/g1)/2.0; g1=x1/g2; } sr=(int)g1; 返回(sr); } int main() { int-num; //num=0; printf(“输入一个介于1和1000之间的数值”); scanf(“%d”和&num); //printf(“你好”); int标志; flag=0; int i; i=2; int m,j; m=j=0; while(i3) { m=sqert(i); 对于代码中的(j=2;j

我写了一个程序,将所有素数打印到给定的一个数 #包括 浮动绝对值(浮动a) { 如果(a=e) { g2=(g1+x1/g1)/2.0; g1=x1/g2; } sr=(int)g1; 返回(sr); } int main() { int-num; //num=0; printf(“输入一个介于1和1000之间的数值”); scanf(“%d”和&num); //printf(“你好”); int标志; flag=0; int i; i=2; int m,j; m=j=0; while(i3) { m=sqert(i); 对于代码中的(j=2;j,c,primes,C,Primes,,您试图将float与double进行比较 #include<stdio.h> float abso(float a) { if(a<0.0) return(-1*a); else return a; } int sqert(int x) { float x1 = (float)x; float g1, g2; g1 = x1/2.0; g2 = x1/g1; double e=0.00

,您试图将
float
double
进行比较

#include<stdio.h>

float abso(float a)
{
    if(a<0.0)
        return(-1*a);
    else
        return a;
}

int sqert(int x)
{
    float x1 = (float)x;
    float g1, g2;
    g1 = x1/2.0;
    g2 = x1/g1;
    double e=0.000000001;
    int sr;
    while(abso(g1-g2)>=e)
    {
        g2 = (g1+x1/g1)/2.0;
        g1 = x1/g2;
    }
    sr = (int)g1;
    return(sr);
}

int main()
{
    int num;
    //num = 0;
    printf("Enter a num between 1 and 1000 ");
    scanf("%d",&num);
    //printf("hello");
    int flag;
    flag = 0;
    int i;
    i = 2;
    int m, j;
    m = j = 0;

    while(i<=num)
    {
        flag = 1;
        if(i==2)
        {
            printf("%d ",i);
            i++;
        }
        else if(i==3)
        {
            printf("%d ",i);
            i= i+2;
        }
        else if(i>3)
        {
            m = sqert(i);
            for(j=2;j<=m;j++)
            {
                if((i%j) == 0)
                {
                    flag = 0;
                    break;
                }
            }

            if(flag == 0)
            {
                i = i + 2;
                continue;
            }    

            if(j==m+1)
                printf("%d ",i);

            i = i + 2;
        }
    }
    printf("\n");
    return(0);
}
这是不正确的,因为
float
double
之间的精度不同

double
的精度是
float
的2倍

float
是32位IEEE 754单精度浮点数
(1位表示符号,8位表示指数,23*表示值),
i、 e.浮点数有7位小数精度

double
是一个64位IEEE 754双精度浮点数
(符号为1位,指数为11位,值为52*位),
i、 e.双精度有15位小数

e
声明为
float
并确保为其分配的值符合
float
的精度
比如:

while(abso(g1-g2)>=e)
然后您的代码将按预期工作

@EricPostphil在评论中说,
sqert
函数可能并不总是返回正确的近似值。这是正确的。
因此,最好使用
math.h
中的
sqrt
来代替
sqert

,因为
g1
g2
是浮点数,由于舍入误差,绝对差值可能永远不会小于
e
。一个
float
只有6或7位精度,所以请尝试
e=0.00001
。您可能还希望在调试器中读取并运行该程序,或者添加printf语句以显示重要变量的值,并将其与预期值进行比较。找出差异的来源,然后进行修复。如果使用math lib提供的平方根函数,会发生什么情况?尝试这样做可以将搜索范围缩小到sqert外的代码或to内的代码。@TheWinterSoldier要想获得更有效的素数方法,请参见“当心!当我将浮点数转换为整数时,我总是使用舍入(
I=(int)(f+.5);
)而不是截断(
I=(int)f;
).我曾经因为没有这样做而被咬过…或者,在整个代码中使用
double
。在现代社会,(除非处理资源非常有限的嵌入式系统/其他系统)无论如何,使用
float
没有多大意义……当程序在使用浮点时出现问题,这个答案会将问题误诊。将
float
值与
double
值进行比较不会导致任何问题。
float
值将毫无错误地转换为
double
,并且mparison将正确进行。此外,建议的修复方法是可疑的。它仍然会让
sqert
返回近似值。是否已对其进行评估以确保近似值足够好?例如,如果函数返回6.99…9 for
sqert(49)
,程序可能会报告49为素数,即使它不是。对于答案中建议的e值,我检查了程序是否将所有素数打印到1000(这是要求)。
printf(“输入一个介于1和1000之间的数值”)
并且它确实打印了所有这些内容。@user846834:我对此表示怀疑。当我现在按照答案中的建议将
e
设置为
0.00001
时,输出包括961,即31•31。当我将其设置为上一个答案中建议的
0.000001
时,程序将挂起。当我将
e
设置为该值时,但更改所有
float
double
,程序包括49个,即7•7。你用来结束循环的方法从根本上是有缺陷的。@EricPostphil:我同意你的看法。OP使用的
sqert
函数不是我会使用的。
sqrt()
来自
math.h
的函数工作得很好。
float e = 0.00001;