You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCC 9.3.0下printf用%Lf输出long double被截断为double问题咨询

GCC 9.3.0下printf输出long double精度问题解答

结论

不存在printf截断long double精度的问题,该现象是x86_64架构Linux平台下浮点类型的正常精度表现,你的操作没有错误。

原理说明

不同浮点类型的有效十进制精度规格如下:

  • 64位double类型:有效精度为15~17位十进制数字
  • x86_64 Linux默认采用的80位扩展精度long double:有效精度为18~19位十进制数字

对比你提供的输出结果:M_PIl的输出值前19位有效数字与Maple输出的高精度π完全匹配,第20位开始的差异是80位long double的精度上限带来的正常误差,完全符合规格,不存在截断到13位的情况,该判断属于对有效数字计数方式的误判。

测试相关内容

测试代码

printf("print m_pi  %.45f\n", M_PI);
printf("print m_pil %.45LF\n", M_PIl);
printf("maple Pi    3.141592653589793238462643383279502884197\n");
printf("m_pil def   3.141592653589793238462643383279502884L\n");

运行输出

print m_pi  3.141592653589793115997963468544185161590576172
print m_pil 3.141592653589793238512808959406186204432742670
maple Pi    3.141592653589793238462643383279502884197
m_pil def   3.141592653589793238462643383279502884L

拓展方案

如果需要更高精度的浮点输出,编译时添加-mlong-double-128参数即可将long double切换为128位四精度格式,该格式可提供约34位十进制有效数字,满足更高精度的需求。

内容的提问来源于stack exchange,提问作者tomdean1939

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 12:12:02