Visual c++ 对于负无穷大输入,modf()返回非零
在Linux和Windows上的gcc和MSVC上进行了尝试,结果非常相同: modf(+无穷大)返回精确的零(0x0000000000000000表示结果双精度,0x00000000表示浮点) 但是modf(-INFINITY)返回6.3e-322(对于浮点版本,返回1.793662034335766e-43)(结果双精度的二进制表示为0x0000000000000080,浮点为0x00000080) 问题: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) 问题: 为什么在第二种情况下会有一个很小的非零值 计算无穷的分数部分有什么标准的预期行为吗
#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
接受两个参数。请提供不提供预期结果的确切代码。请参阅独立代码示例的更新问题。抱歉,之前的格式错误。