我正在尝试使用Leibniz公式计算pi。但是,我的代码似乎总是产生' 0.19634952834936123'最后,这显然不是pi。
代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.lobby_activity_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
mFilterMenuItem = findViewById(R.id.action_search_filter_menu_item);
switch (item.getItemId()) {
case R.id.action_search_menu_item: {
Toast.makeText(this, "Search button clicked", Toast.LENGTH_SHORT).show();
return true;
}
case R.id.action_search_filter_menu_item:{
mFilterMenuItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TileMenu tileMenu = new TileMenu(GuestActivity.this, v, R.menu.filter_menu);
Log.e("MENU ITEM", mFilterMenuItem.toString());
}
});
return true;
}
default: {
return super.onOptionsItemSelected(item);
}
}
}
答案 0 :(得分:5)
该和收敛到π/ 4,而不是4π。因此,您想要使用结果
x * 4
不
x / 4
除此之外,您的代码工作正常。
答案 1 :(得分:2)
我的IDE花了一些时间来运行你的代码。 Additionally, if you're running that code in Python 2 that range
expression is going to use up a lot of memory。如果您愿意,这里有一种替代方法,可以懒惰地生成Leibniz公式术语来估算pi。 Python的生成器函数似乎非常适合这类任务。
def estimate_pi(num_terms):
return 4 * sum(x for x in generate_leibniz_terms(num_terms))
def generate_leibniz_terms(num_terms):
denominator = 1
sign = 1
for _ in range(num_terms):
yield sign * (1 / denominator)
sign = -sign
denominator += 2
print(estimate_pi(100))
<强>输出强>
3.1315929035585537