二分法做平方根

2021-08-09 18:45:15 字數 2216 閱讀 9705

注意這裡的浮點數

不然的話程式會報錯

# coding:utf-8

# 二分法計算20的平方根

import math

a = 0.0

#多次二分後會變成二分法,所以要設定成浮點數,python裡就是直接賦值成浮點數

b = c = float(raw_input('enter a number : '))

n = 100

while true and n > 0:

i = (a+b)/2

ifabs(i**2-c) < 0.001

orabs(i**2-c) == 0:

print 'sqrt(20) is', i

break

else:

if i ** 2 > c:

b = i

print 'big', a, b,i

else:

a = i

print 'small', a, b

n -= 1

enter a

number : 20

big 0.0

10.0

10.0

big 0.0

5.05.0

small 2.5

5.0small 3.75

5.0small 4.375

5.0big 4.375

4.6875

4.6875

big 4.375

4.53125

4.53125

small 4.453125

4.53125

big 4.453125

4.4921875

4.4921875

big 4.453125

4.47265625

4.47265625

small 4.462890625

4.47265625

small 4.4677734375

4.47265625

small 4.47021484375

4.47265625

small 4.47143554688

4.47265625

sqrt(20) is 4.47204589844

改進不能小數的缺點,而且定義成函式

# coding:utf-8

# 二分法計算20的平方根

defsqrt_func

():import math

a = 0.0

# 多次二分後會變成二分法,所以要設定成浮點數,python裡就是直接賦值成浮點數

c = float(raw_input('enter a number : '))

b = max(c, 1)

n = 100

while

true

and n > 0:

i = (a + b) / 2

if abs(i ** 2 - c) < 0.001

or abs(i ** 2 - c) == 0:

print

'sqrt(20) is', i

break

else:

if i ** 2 > c:

b = i

print

'big', a, b, i

else:

a = i

print

'small', a, b

n -= 1

if __name__=='__main__':

sqrt_func()

print

'pass'

enter a

number : 0.09

big 0.0

0.50.5

small 0.25

0.5big 0.25

0.375

0.375

big 0.25

0.3125

0.3125

small 0.28125

0.3125

small 0.296875

0.3125

big 0.296875

0.3046875

0.3046875

sqrt(20) is 0.30078125

pass

二分法求平方根(Python實現)

使用二分法 bisection method 求平方根。1 defsqrtbi x,epsilon 2assert x 0,x must be non nagtive,not str x 3assert epsilon 0,epsilon must be postive,not str epsilo...

Python用二分法求平方根

好了,正如標題所示,我們今天要用二分法來求平方根。首先要有數字,但是老是有人寫字串該怎麼辦呢?老是有人在寫數學題的時候打字串 try x int input please enter a whole number to measure to square root except print 然後是重...

演算法程式設計11 二分法求平方根

計算並返回 x 的平方根,其中 x 是非負整數。由於返回型別是整數,結果只保留整數的部分,小數部分將被捨去。示例 1 輸入 4 輸出 2 示例 2 輸入 8 輸出 2 說明 8 的平方根是 2.82842 由於返回型別是整數,小數部分將被捨去。本題可用二分法求解,但與常規的二分法有細微不同,因為mi...