一些常用编程经验(持续补充)
1.因乘积因子过于太小,想成导致下溢问题或浮点数舍入导致错误
由于大部分因子都非常小,所以程序会下溢出或者得到不正确答案。在代数中有ln(a*b) = ln(a) + ln(b),于是通过对数可以避免下溢出或者浮点数舍入导致的错误。同时,采用自然对数进行处理不会有任何损失。自然ln不会影响函数的单调性。
2.数组的不同声明方式,初始化的值不同
1 int parray[10];//初始化时由不确定的值填充 2 int *p_int = new int[10]();//初始化由0进行填充,即有类型type的默认值进行填充,int做累整形类使用,又是数值型,所以会用0进行填充 3 int i; 4 for (i = 0; i < 10; i++) 5 { 6 cout << parray[i] << " "; 7 } 8 for (i = 0; i < 10; i++, p_int++) 9 { 10 cout << *p_int << " "; 11 }
输出:
-858993460 -858993460 -858993460 -858993460 -858993460
-858993460 -858993460 -858993460 -858993460 -858993460
0 0 0 0 0 0 0 0 0 0