Lun*_*oms -1 c linux floating-point gcc
#include <stdio.h>
#include <float.h>
int main(int argc, char** argv)
{
long double pival = 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899L;
float pival_float = pival;
printf("%1.80f\n", pival_float);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在gcc上得到的输出是:
3.14159274101257324218750000000000000000000000000000000000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)
浮动使用23位mantisa.因此,可以表示的最大分数是2 ^ 23 = 8388608 = 7个精度的十进制数字.
但上面的输出显示精度为23的十进制数字(3.14159274101257324218750).我预计它打印3.1415927 000000000000 ....)
我错过了什么?
sam*_*gak 10
你只有7位数的精度.皮是
3.141592 6535897932384626433832795028841971693993751058209 ...
但是从打印你的浮点近似值得到的输出是
3.141592 74101257324218750000 ...
正如您所看到的,值从小数点后的第7位开始偏离.
如果要求printf()
小数位后面的80位数,它将打印出浮点数中存储的二进制值的十进制表示的多个数字,即使这个数字远远超过浮点表示允许的精度.
归档时间: |
|
查看次数: |
295 次 |
最近记录: |