Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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
Visual c++ 对于负无穷大输入,modf()返回非零_Visual C++_Gcc_Math.h - Fatal编程技术网

Visual c++ 对于负无穷大输入,modf()返回非零

Visual c++ 对于负无穷大输入,modf()返回非零,visual-c++,gcc,math.h,Visual C++,Gcc,Math.h,在Linux和Windows上的gcc和MSVC上进行了尝试,结果非常相同: modf(+无穷大)返回精确的零(0x0000000000000000表示结果双精度,0x00000000表示浮点) 但是modf(-INFINITY)返回6.3e-322(对于浮点版本,返回1.793662034335766e-43)(结果双精度的二进制表示为0x0000000000000080,浮点为0x00000080) 问题: 为什么在第二种情况下会有一个很小的非零值 计算无穷的分数部分有什么标准的预期行为吗

在Linux和Windows上的gcc和MSVC上进行了尝试,结果非常相同:

modf(+无穷大)返回精确的零(0x0000000000000000表示结果双精度,0x00000000表示浮点)

但是modf(-INFINITY)返回6.3e-322(对于浮点版本,返回1.793662034335766e-43)(结果双精度的二进制表示为0x0000000000000080,浮点为0x00000080)

问题:

  • 为什么在第二种情况下会有一个很小的非零值

  • 计算无穷的分数部分有什么标准的预期行为吗

  • 代码示例:

    #include <stdio.h>
    #include <math.h>
    
    int main(int argc, char* argv[])
    {
      float f1;
      float f1a;
      double f2;
      double f2a;
    
      f1 = modff(-INFINITY,&f1a); 
      f2 = modf(-INFINITY,&f2a);
    
      //Dump into file to easily see the bits 
      FILE * f = fopen("a","wb");
      fwrite(&f1,4,1,f);
      fwrite(&f2,8,1,f);
      fclose(f);
    
      return 0;
    }
    
    #包括
    #包括
    int main(int argc,char*argv[])
    {
    浮球f1;
    浮动f1a;
    双f2;
    双f2a;
    f1=modff(-无穷大,&f1a);
    f2=modf(-无穷大,&f2a);
    //转储到文件中,以便轻松查看位
    文件*f=fopen(“a”、“wb”);
    fwrite(&f1,4,1,f);
    fwrite(&f2,8,1,f);
    fclose(f);
    返回0;
    }
    
    0x00..80
    在一个小端点平台上表示负零,而不是上面的任何值

    modf
    对于符合IEC 60559浮点算法的C实现,必须返回负零。根据C99§F.9.3.12,modf功能:

    modf(±∞, iptr)
    返回±0并存储±∞ 在iptr指向的对象中


    你能把复制这个的代码贴出来吗?(此处无法复制)请使用标签下方的编辑链接将其添加到问题中(并使用代码格式选项)。代码在注释中不可读。您还需要解释这些FL类型和常数到底是什么。
    modf
    接受两个参数。请提供不提供预期结果的确切代码。请参阅独立代码示例的更新问题。抱歉,之前的格式错误。