Skip to content

Instantly share code, notes, and snippets.

@kauefraga
Last active May 6, 2024 23:57
Show Gist options
  • Save kauefraga/0ce9b61e9f2558fd9d406c882fff3516 to your computer and use it in GitHub Desktop.
Save kauefraga/0ce9b61e9f2558fd9d406c882fff3516 to your computer and use it in GitHub Desktop.
Uma função que calcula uma raiz quadrada com o método babilônico.
from rich import print
from rich.panel import Panel
from math import sqrt
def average(items: list[int]):
n = 0
for i in range(len(items)):
n += items[i]
return n / len(items)
def sqrt_by_babilonics(n: int, aproximated_square_root: int, limit: int = 5):
"""Calcula a raiz quadrada de um número usando o método de aproximação babilônico.
Args:
n (int): um radicando que se deseja calcular a raiz quadrada
aproximated_square_root (int): a raiz quadrada perfeita mais próxima de `n`
limit (int, optional): o número de vezes que a função irá tentar calcular. Defaults to 5.
Returns:
float: o resultado, provavelmente decimal, da raiz quadrada de `n`
"""
b = average([aproximated_square_root, n / aproximated_square_root])
limit -= 1
print(f'A raiz quadrada de {n} é, aproximadamente, {b}')
if limit == 0:
return b
return sqrt_by_babilonics(n, b, limit)
if __name__ == '__main__':
N = 2
print('', Panel(
f'O número que tentaremos aproximar será {N}.\n' +
'A raiz quadrada perfeita mais próxima de 2 (tirando 1) é a raiz quadrada de 4, usaremos-a.\n' +
f'Usando uma funcão de raiz quadrada temos que a raiz quadrada de 2 é [green]{sqrt(2)}[/].\n' +
f'A raiz quadrada de acordo com os babilônicos é [green]{sqrt_by_babilonics(N, 2)}[/].',
title='[b magenta]Método babilônico de aproximação das raizes quadradas'))
fn average(numbers: Vec<f32>) -> f32 {
let sum = numbers.iter().sum::<f32>();
sum / numbers.len() as f32
}
fn sqrt(n: f32, aproximated_square_root: f32, limit: Option<i32>) -> f32 {
let limit = limit.unwrap_or(5);
let b = average(vec![aproximated_square_root, n / aproximated_square_root]);
println!("A raiz quadrada de {} é aproxidamente, {}", n, b);
if limit == 0 {
return b;
}
sqrt(n, b, Some(limit - 1))
}
fn main() {
println!("sqrt(2)");
println!("resultado: {}", sqrt(17.0, 4.0, None));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment