壹鲦热带鱼 - 编程误区
type: channel
link: https://tropical-fish.cn/tag/%E7%BC%96%E7%A8%8B%E8%AF%AF%E5%8C%BA/
items: 关于double和float精度丢失的问题

关于double和float精度丢失的问题
type: item
date: 2025-09-24T18:51:00+08:00
description: 关于double和float精度丢失的问题起因这个问题，我记得我是在五年级的时候就有了，情况大概如下现在，你需要将π放进一个变量中，需要保留到小数点后100位过程完成代码第一次代码当时，我想着，不是so easy嘛，然后编写出了如下代码#include <bits/stdc++.h> using namespace std; ​ int main(){ float x=3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679; cout<<x; }然后，我怀着激动的心情，颤抖的手，内心OS：马上就可以AK了！哈哈哈哈！！！ ，但是，现实给我了种种一拳* 正在执行任务: C:\SOFTWARE\Dev-Cpp\MinGW64\bin\g++.EXE -Wall -Wextra -g3 -std=c++23 e:\double.cpp -o e:\output\double.exe PS E:\output> & .\'double.exe' 3.14159我：？What FUCK???这感觉不太对啊，这输出怎么能这样子哦！我忘了，还有double！使用double完成然后编写出了如下代码#include <bits/stdc++.h> using namespace std; ​ int main(){ double x=3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679; cout<<x; }一键运行：* 正在执行任务: C:\SOFTWARE\Dev-Cpp\MinGW64\bin\g++.EXE -Wall -Wextra -g3 -std=c++23 e:\double.cpp -o e:\output\double.exe PS E:\output> & .\'double.exe' 3.14159？没保存吗Try again* 正在执行任务: C:\SOFTWARE\Dev-Cpp\MinGW64\bin\g++.EXE -Wall -Wextra -g3 -std=c++23 e:\double.cpp -o e:\output\double.exe PS E:\output> & .\'double.exe' 3.14159What FUCK?怎么还是这样?那时候我情绪崩溃了，不知道咋回事然后，我突然想起来了保留小数点的方法！即setprecision使用setprecision的方法完成然后写出了如下代码#include <bits/stdc++.h> using namespace std; ​ int main(){ double x=3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679; cout<<setprecision(100)<<x; }嘿嘿嘿，兄弟们，终于可以AK了！！！* 正在执行任务: C:\SOFTWARE\Dev-Cpp\MinGW64\bin\g++.EXE -Wall -Wextra -g3 -std=c++23 e:\double.cpp -o e:\output\double.exe PS E:\output> & .\'double.exe' 3.141592653589793115997963468544185161590576171875az好像确实精确了亿点，但没有完全精确吧？怀疑人生中。。。哦！还有printf！！！使用printf的方法完成#include <bits/stdc++.h> using namespace std; ​ int main(){ double x=3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679; printf("%.100lf",x); }这下总不能错了，printf可是C语言的，怎么可能错？？可是...现实又给我了重重一锤* 正在执行任务: C:\SOFTWARE\Dev-Cpp\MinGW64\bin\g++.EXE -Wall -Wextra -g3 -std=c++23 e:\double.cpp -o e:\output\doub…