C定义大数组,浮点数误差的解决方案。—学习日记
写博客的目的是记录自己的学习,和记住自己苦苦搜索解决方案的泪水,分享c语言常遇见的问题,只有我这个新手才能更加了解新手嘛。
………………………………………………………………
我第一次去写超过20万的数组,直接在main函数里定义int a【…】,结果可想而知,shell小黑框迟迟不显示——内存溢出,因为栈的内存大约在1M左右。
解决方案
方案一,定义全局变量,把它放在全局的储存器里面。——也就是在
#include 《stdio.h》
int a[1000000];
int main()………
方案二,放在堆上面,用指针的方式——
#include
int main()
{ int *p,i ;
p=new int [1000000];
for(i=;i<;i++){
p【i】=0;
}
}
………………………………………………………
第二件事情,在if语句中两个浮点数是否相等,有误差,有可能不会成功,因为任何数字都是电脑以二进制的方式储存的,比如你让表示1.23,二进制不能精准地表达这个数字,它会拿一个可以二进制表达且很相近的数字来代替。
老师反复强调,实践的时候就是忘。
解决方案设置精读值accuracy
顺便介绍一下在math.h库里的fabs函数,对浮点数取绝对值。
abs()用于整数表达式的绝对值
fabs()用于浮点数表达式的绝对值
OK~~