質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1279閲覧

バビロニアの平方根について

nami99

総合スコア1

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/06/19 09:35

編集2020/06/19 09:41

前提・実現したいこと

pythonでのコード記述について。
(プログラミング自体も)超の付く初心者です。
バビロニアの平方根のアルゴリズムを用いて2の平方根を出す、というものに挑戦しています。
前提として、
a=2、初期値b=1、δ=0.00001としています。

発生している問題・エラーメッセージ

a = 2
b = 1
delta = 0.00001

b = (a + b / a)/ 2

print(b)

というところまで何とか考えてみました。
(まずこれがバビロニアの平方根のアルゴリズムとして正しい理解かも正直微妙です)

b = (a + b / a)/ 2
の前の行にwhile文を入れることでδを絡めたコードが記述できる、と思っています。

while文を使わずに試してみたのですが、
恐らく3回の操作で求めたい精度の近似値が出てくるのでは?と思います。

試したこと

while文の中身として、

while (新しく出てきたb)-(元のb)> delta:

というものを考えてみました。

ですが、

・そもそもこの考え方が合っているのかということと
・(合っていたとして)うまくそれを記述する方法

が分かりません。

全てにおいて右も左もわからない状態で、質問の形式や困っている内容の記述法に至らない点も多々あると思いますが、どうぞご容赦ください。

ご教授願います。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2020/06/19 10:01

ソースを提示して下さい。
guest

回答1

0

ベストアンサー

ニュートン法のバリエーションでしょう。
x = (x + N/x)/2
を繰り返すと √N に近づきます。

なので、
b = 2
a = テキトーな値
から始めて
a = (a + b/a)/2
を繰り返せば a は √b = √2 に近づきます。

>>> a = 2 >>> b = 2 >>> while a*a - b > 0.0001: ... a = (a + b/a)/2 ... >>> a 1.4142156862745097

こんなカンジで。

投稿2020/06/19 09:51

編集2020/06/19 22:23
episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nami99

2020/06/19 09:58

回答ありがとうございます。 書き方が至らなかったかもしれません、その手法自体は理解しているつもりです。 精度が十分になるまでwhile文を使って反復させたいのですが、 その記述はどのようにするのが適当でしょうか...? よければ回答願います。 よろしくお願いします。
nami99

2020/06/19 09:59

a=1、精度delta = 0.00001で計算しようとしています。
episteme

2020/06/19 10:03

追記しました
nami99

2020/06/19 10:09

できました!ありがとうございます。助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問