11行代码AC——比紫书优化,例题2-3 近似计算——解题报告

励志用更少的代码做高效的表达


题意:

计算π/4 = 1 - 1/3 + 1/5 - 1/7 + …,直到最后一项小于10^-6。

思路分析:

本题很简单,因此计算重心从解题转化为优化。
本题为重复计算,但只有算完一项后,才知道它是否小于10^-6,也就是说,循环终止判断是在计算之后,而不是计算之前,因此最佳解法显然是使用do-while循环,但紫书中并未给出该种解法,因此笔者写了这篇博文以供参考

代码:

#include<cstdio>
int main() {
	double num = 1, n = 1;
	bool flag = false;
	do {
		flag ? (num += 1/(n*2+1)) : (num -= 1/(n*2+1)) ;
		flag = !flag; 
	}while((1/((n++)*2+1)) >= 1e-6);
	printf("%.6f", num);
	return 0;
}

择苦而安,择做而乐,虚拟现实终究比不上真实精彩之万一。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章