首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >float支持多少位小数?

float支持多少位小数?
EN

Stack Overflow用户
提问于 2021-01-02 16:26:07
回答 2查看 64关注 0票数 0
代码语言:javascript
运行
复制
int main(){
    int s=200;
    printf("%.12f",s/3.0);
}

即使float只能支持6-7位小数,这个程序如何给出66.666666666667的输出?

同时,

代码语言:javascript
运行
复制
int main(){ 
    float s=200; 
    printf("%.12f",s/3);
}

给了66.666664123535。

请帮帮忙?

EN

回答 2

Stack Overflow用户

发布于 2021-01-02 18:33:29

第一个程序中没有任何float%fdouble3.0也是doubledouble类型的精度约为16位小数。在第二个程序中,对于可变函数,float被提升为double,但并没有神奇地获得更高的精度。

摘自C11§6.4.4.2

4无后缀的浮点常量具有双精度类型。如果以字母F或F作为后缀,则其类型为float。如果以字母L或L作为后缀,则它的类型为long double。

和C11§6.5.2.2

6如果表示被调用函数的表达式的类型不包含原型,则对每个参数执行整数提升,并将类型为的浮点型参数提升为双精度

7如果表示被调用函数的表达式具有包含原型的类型,则将参数隐式转换为相应参数的类型,就像通过赋值一样,将每个参数的类型视为其声明类型的未限定版本。函数原型声明程序中的省略号表示法会导致参数类型转换在最后声明的参数之后停止。在尾随参数上执行默认参数提升。

票数 2
EN

Stack Overflow用户

发布于 2021-01-02 16:31:19

如果没有精度,它将被认为是6。否则,如果你指定了精度,它将接受精度。

引用C11,第7.21.6.1/P8章,(重点是我的)

f,F表示浮点数的双参数将转换为-ddd.ddd,样式的小数表示法,其中小数点字符后的位数等于精度规范。如果缺少精度,则取6; ...

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65537238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档