【高精浮点】关于long double的使用方法
本文于 2023.3.17 更新并添加部分内容。
本文于 2023.4.13 修改关于 long double 的字节数和精度。
- 听说今天桂林CCPC计算几何卡了double,就来学一下更高精的浮点long double。
文章链接:
总结:
性质:
-
double 占 8 字节;long double 有 16 字节、12 字节、8 字节,其中 16 字节占大多数,因为 ANSI C 标准并未规定 long double 的确切精度,所以对于不同平台可能有不同的实现。
-
double 能精确有效数字的 14 或 15 位;long double 的精确位数要看平台和编译器具体实现。经测试,在我的电脑(long double 12 字节)和洛谷在线 IDE (long double 16 字节)能精确到 18 或 19 位左右。以下是在一些不同编译器上的测试代码:
GNU C++17 (64):https://codeforces.com/contest/1816/submission/201913463
GNU C++20 (64):https://codeforces.com/contest/1816/submission/201913498
GNU C++17:https://codeforces.com/contest/1816/submission/201913535
Clang++17 Diagnostics:https://codeforces.com/contest/1816/submission/201913549
MS C++ 2017:https://codeforces.com/contest/1816/submission/201913729
圆周率前 30 位为:3.14159265358979323846264338327,可以自行比较。
写代码注意事项:
-
输入输出:
long double
可以用scanf,printf
或者cin,cout
输入输出。如用前者,则使用方法如下:-
输入:
scanf("%Lf", &a);
-
输出:
printf("%.10Lf", a);
-
-
函数:
long double
的常用函数都要在末尾加个l
, 如fabsl(a) , sqrtl(a) , cosl(a)
, … 。这种函数涉及到浮点数的话,都是long double
类型的。举例如图:
- 常量:C++ 中一般的浮点数常量默认类型为
double
。如果在浮点数常量末尾加上字符l
,则类型为long double
。举例如图:
关于桂林这种卡精度的题需要注意的事项:
-
整数输入到浮点数中是没有精度损失的,叉乘可以直接根据==0来判断是否为零。测试代码
-
当要求输出答案精度较大时,为了防止误差累加累乘,最好用long double。
更多推荐
所有评论(0)