用莱布尼兹公式计算pi

时间:2017-01-09 17:57:46

标签: python math pi

我正在尝试使用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);
            }
        }
    }

2 个答案:

答案 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