作者sjgau (sjgau)
看板C_and_CPP
标题Re: [问题] 浮点数的残值
时间Thu Nov 12 15:36:04 2009
以下,我使用 VC++ 6.0
compile 的时候有 warning
/*
Compiling...
VC0331.CPP
d:\vc0331\vc0331.cpp(6) : warning C4305: 'initializing' : truncation from
'const double' to 'float'
Linking...
VC0331.exe - 0 error(s), 1 warning(s)
num1=123.1234588623046900000000
num2=123.1234567890123500000000
Press any key to continue
*/
#include <stdio.h>
int main()
{
float num1=123.12345678901234567890;
double num2=123.12345678901234567890;
printf("num1=%16.22f\n",num1);
printf("num2=%16.22lf\n",num2);
return 0;
}
※ 引述《TIME1987 (把握当下)》之铭言:
: 遇到的问题:float与double在位数上的不同
: #include <stdio.h>
: int main()
: {
: float num1=123.456789012345;
: double num2=123.456789012345;
: printf("num1=%16.12f\n",num1);
: printf("num2=%16.12f",num2);
: return 0;
: }
: 程式跑出来的结果:num1=123.456787109375
: num2=123.456789012345
: 开发平台:codeblock
: float只能容纳4个位元组 所以是8个位数的精度
: 但为何num1=123.456787109375从第8位之後的数字会是这麽不规律呢?
: 书上说是记忆体的残值 但这个残值是怎麽出来的呢?
: 谢谢~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.231.93.135
1F:推 joefaq:那串太长compiler会把他当double然後截掉 11/12 20:14