0
試戴gcc和MSVC,既在Linux和Windows,顯着相同的結果:MODF()爲負無窮大返回非零輸入
MODF(+ INFINITY)返回精確零(0x0000000000000000在所得的二進制表示雙,00000000浮法)
但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;
}
你能發佈重現此代碼嗎? (無法在此處顯示) – Mat
請使用標記下的編輯鏈接將其添加到您的問題中(並使用代碼格式選項)。代碼在評論中無法閱讀。你也需要解釋這些FL類型和常量究竟是什麼。 – Mat
'modf'有兩個參數。請提供確切的代碼,不會給出您期望的結果。 –