math

Constantes e auxiliares matemáticos inspirados no math.h do C, implementados em Bern puro.

import math
Nota: As funções transcendentais (exp, log, sin, …) são calculadas com séries truncadas e métodos iterativos, então são aproximações precisas - não resultados exatos de hardware.

Constantes

  • pi = 3.141592653589793
  • tau = 6.283185307179586 (2π)
  • e = 2.718281828459045
2 * pi
-- Saída: 6.283185307179586

Operações básicas

abs(x) → número

Valor absoluto; preserva o tipo numérico da entrada.

abs(-7)
-- Saída: 7
fabs(x) → número

Alias de abs que espelha o fabs do C.

fabs(-3.5)
-- Saída: 3.5
fmin(a, b) → double

O menor de dois números, calculado em espaço de double.

fmin(3, 8)
-- Saída: 3.0
fmax(a, b) → double

O maior de dois números.

fmax(3, 8)
-- Saída: 8.0
clamp(x, lo, hi) → número

Restringe x ao intervalo [lo, hi].

clamp(15, 0, 10)
-- Saída: 10.0
clamp(-2, 0, 10)
-- Saída: 0.0
fmod(x, y) → número

Resto de ponto flutuante (o fmod do C).

fmod(10, 3)
-- Saída: 1

Potências & raízes

pow(base, expoente) → número

Eleva base a um expoente inteiro por exponenciação rápida. Expoentes negativos dão recíprocos.

pow(2, 8)
-- Saída: 256
pow(2, -1)
-- Saída: 0.5
sqrt(x) → double

Raiz quadrada via iteração de Newton–Raphson. Entradas negativas retornam NaN.

sqrt(16)
-- Saída: 4.0
hypot(a, b) → double

O comprimento da hipotenusa √(a² + b²).

hypot(3, 4)
-- Saída: 5.0

Exponencial & logarítmica

exp(x) → double

e elevado a x (série de Taylor).

exp(1)
-- Saída: ~2.718281828
log(x) → double

Logaritmo natural (base e). Entradas não positivas retornam NaN.

log(e)
-- Saída: ~1.0
log10(x) → double

Logaritmo base 10.

log10(1000)
-- Saída: ~3.0

Trigonometria

Todas as funções trigonométricas recebem e devolvem radianos.

sin(radianos) → double

Seno de um ângulo.

sin(pi / 2)
-- Saída: ~1.0
cos(radianos) → double

Cosseno de um ângulo.

cos(0)
-- Saída: 1.0
tan(radianos) → double

Tangente; NaN em múltiplos ímpares de π/2.

tan(pi / 4)
-- Saída: ~1.0
atan(z) → double

Tangente inversa.

atan(1)
-- Saída: ~0.785   (π/4)
atan2(y, x) → double

Arco-tangente de dois argumentos que respeita o quadrante de (x, y).

atan2(1, 1)
-- Saída: ~0.785   (π/4)

Conversão de ângulos

toRadians(graus) → double

Converte graus em radianos.

toRadians(180)
-- Saída: ~3.14159
toDegrees(radianos) → double

Converte radianos em graus.

toDegrees(pi)
-- Saída: ~180.0

Juntando tudo

Várias funções cooperam ao calcular geometria. Aqui está a distância entre dois pontos e o ângulo da reta entre eles em graus:

Distância e direção entre dois pontos

import math

x1 = 0.0
y1 = 0.0
x2 = 3.0
y2 = 3.0

dx = x2 - x1
dy = y2 - y1

distance = hypot(dx, dy)
-- Saída: ~4.2426

angle = toDegrees(atan2(dy, dx))
-- Saída: ~45.0

E usar clamp com pow para uma curva simples de "crescer e limitar":

Crescimento quadrático com teto

import math

def grow(level) -> clamp(pow(level, 2), 0, 100)

grow(5)
-- Saída: 25.0
grow(12)
-- Saída: 100.0   (144 limitado)