OJ之大数与高精度题必备知识
浮点数的存储方式与高精度
存储原理
科学计数法
IEEE 754
待补充。。。
高精度计算中的误差与规避技巧
待补充。。。
PI的高精度表示方法
对精度要求较高的题目,一般PI的表示会需要高精度来确保结果的准确性。这时可以用 math.h 中的反三角函数来表示高精度的PI:
PI = atan(1.0) * 4; 或 PI = acos(-1); 都可以达到目的。
【注意:三角函数和反三角函数中的输入都是弧度,而非角度。】
数据类型的表示范围
整型
在内存中,正数以原码的形式存储,负数以补码的形式存储。
整型数据主要考察大数的计算、存储与表示。
int_32 :最大20亿左右(即一个2,后面跟9个0);
long 类型在不同的编译器中可能不一样,总体原则是不小于 int_32 ,所以一般大数容量不够时直接升级 long long ;
long long :最大为一个9后面跟18个0;
所有类型的 unsigned 的话没有负数部分,最大值乘以2。
浮点型
与整型不同,浮点型数据在内存中的存储方式是科学计数法,所以在高精度计算中,如果参与计算的数据精度不够会导致计算结果有较大偏差。
这里的精度,即小数点后的位数。
float :4字节,7位精度;
double :8字节,15位精度;
long double :10字节,19位精度;
【有关数据类型之间的转换详见这篇:混合运算中不同数据类型之间的转换原则(C语言)】
关于内存限制1MB = 1024KB = 1048576Byte
16位的平台 int 是16位的(16位操作系统),就是0x0000 ~ 0xFFFF, 一个 int 占2个字节,所以1MB内存可以有524288个 int_16 ;
32位的平台 int 是32位的(32位及以上操作系统),就是0x00000000 ~ 0xFFFFFFFF,一个 int 占4个字节,所以1MB内存可以有262144个 int_32 ;
以此类推。
Min是清明的茗