Cálculo
Módulo para cálculos y procesamiento de valores numéricos.
Estas definiciones forman parte del módulo calc y no se importan por defecto.
Constantes
inffloatDesde: siempre
Infinito () como valor.
Es el mismo valor que float.inf. Consultá la documentación correspondiente para más detalles.
pifloatDesde: siempre
Constante de Arquímedes ().
Es la razón entre la circunferencia de un círculo y su diámetro.
Ver ejemplo
#calc.pi

taufloatDesde: 0.8.0
La circunferencia de un círculo unitario ().
La constante se define por la relación .
Ver ejemplo
#calc.tau \
#(2 * calc.pi)

efloatDesde: siempre
Número de Euler ().
Es la base del logaritmo natural y de la función exponencial.
Ver ejemplo
#calc.e

Funciones
absDesde: siempre
Calcula el valor absoluto de un valor numérico.
Ver ejemplo
#calc.abs(-5) \
#calc.abs(5pt - 2cm) \
#calc.abs(2fr) \
#calc.abs(decimal("-342.440"))

value
El valor cuyo valor absoluto se calcula.
powDesde: siempre
Eleva un valor a un exponente.
Ver ejemplo
#calc.pow(2, 3) \
#calc.pow(decimal("2.5"), 2)

base
La base de la potencia.
Si es un decimal, el exponente solo puede ser un entero.
exponent
El exponente de la potencia.
expDesde: 0.5.0
Eleva a un exponente.
Ver ejemplo
#calc.exp(1)

exponent
El exponente de la potencia.
sqrtDesde: siempre
Calcula la raíz cuadrada de un número.
Ver ejemplo
#calc.sqrt(16) \
#calc.sqrt(2.5)

value
El número cuya raíz cuadrada se calcula. Debe ser no negativo.
rootDesde: 0.11.0
Calcula la raíz real ésima de un número.
Si el número es negativo, debe ser impar.
Ver ejemplo
#calc.root(16.0, 4) \
#calc.root(27.0, 3)

radicand
La expresión de la que se toma la raíz.
index
El valor de .
sinDesde: siempre
Calcula el seno de un ángulo.
Cuando se la llama con un entero o un flotante, se interpretan como radianes.
Ver ejemplo
#calc.sin(1.5) \
#calc.sin(90deg)

angle
El ángulo cuyo seno se calcula.
cosDesde: siempre
Calcula el coseno de un ángulo.
Cuando se la llama con un entero o un flotante, se interpretan como radianes.
Ver ejemplo
#calc.cos(1.5) \
#calc.cos(90deg)

angle
El ángulo cuyo coseno se calcula.
tanDesde: siempre
Calcula la tangente de un ángulo.
Cuando se la llama con un entero o un flotante, se interpretan como radianes.
Ver ejemplo
#calc.tan(1.5) \
#calc.tan(90deg)

angle
El ángulo cuya tangente se calcula.
asinDesde: siempre
Calcula el arcoseno de un número.
Ver ejemplo
#calc.asin(0) \
#calc.asin(1)

value
El número cuyo arcoseno se calcula. Debe estar entre y .
acosDesde: siempre
Calcula el arcocoseno de un número.
Ver ejemplo
#calc.acos(0) \
#calc.acos(1)

value
El número cuyo arcocoseno se calcula. Debe estar entre y .
atanDesde: siempre
Calcula el arcotangente de un número.
Ver ejemplo
#calc.atan(0) \
#calc.atan(1)

value
El número cuyo arcotangente se calcula.
atan2Desde: 0.3.0
Calcula el arcotangente de cuatro cuadrantes de una coordenada.
El arcotangente de cuatro cuadrantes de se define como el argumento del número complejo .
Devuelve un angle entre -180deg y 180deg.
Tené en cuenta que esta función acepta , no .
Ver ejemplo
#calc.atan2(1, 1) \
#calc.atan2(-2, -3)

x
La coordenada .
y
La coordenada .
sinhDesde: siempre
Calcula el seno hiperbólico de un ángulo hiperbólico.
El seno hiperbólico de se define de la siguiente manera:
Ver ejemplo
#calc.sinh(0) \
#calc.sinh(1.5)

value
El ángulo hiperbólico cuyo seno hiperbólico se calcula.
coshDesde: siempre
Calcula el coseno hiperbólico de un ángulo hiperbólico.
El coseno hiperbólico de se define de la siguiente manera:
Ver ejemplo
#calc.cosh(0) \
#calc.cosh(1.5)

value
El ángulo hiperbólico cuyo coseno hiperbólico se calcula.
tanhDesde: siempre
Calcula la tangente hiperbólica de un ángulo hiperbólico.
La tangente hiperbólica de se define de la siguiente manera:
Ver ejemplo
#calc.tanh(0) \
#calc.tanh(1.5)

value
El ángulo hiperbólico cuya tangente hiperbólica se calcula.
asinhDesde: 0.15.0
Calcula el seno hiperbólico inverso de un número.
El seno hiperbólico inverso de se define de la siguiente manera:
Ver ejemplo
#calc.asinh(0) \
#calc.asinh(1)

value
El número cuyo seno hiperbólico inverso se calcula.
acoshDesde: 0.15.0
Calcula el coseno hiperbólico inverso de un número.
El coseno hiperbólico inverso de se define de la siguiente manera:
Ver ejemplo
#calc.acosh(1) \
#calc.acosh(2.5)

value
El número cuyo coseno hiperbólico inverso se calcula. Debe ser mayor o igual que .
atanhDesde: 0.15.0
Calcula la tangente hiperbólica inversa de un número.
La tangente hiperbólica inversa de se define de la siguiente manera:
Ver ejemplo
#calc.atanh(0) \
#calc.atanh(0.5)

value
El número cuya tangente hiperbólica inversa se calcula. Debe estar entre y (exclusivos).
logDesde: siempre
Calcula el logaritmo de un número.
Si no se especifica la base, el logaritmo se calcula en base diez.
Ver ejemplo
#calc.log(100)

value
El número cuyo logaritmo se calcula. Debe ser estrictamente positivo.
basePor defecto: 10.0
La base del logaritmo. No puede ser cero.
lnDesde: 0.5.0
Calcula el logaritmo natural de un número.
Ver ejemplo
#calc.ln(calc.e)

value
El número cuyo logaritmo se calcula. Debe ser estrictamente positivo.
erfDesde: 0.15.0
Aplica la función de error a un número.
El valor de la función de error en se define de la siguiente manera:
Ver ejemplo
#calc.erf(0.2)

value
El número en el que se calcula la función de error.
factDesde: 0.3.0
Calcula el factorial de un número.
Ver ejemplo
#calc.fact(5)

number
El número cuyo factorial se calcula. Debe ser no negativo.
permDesde: 0.3.0
Calcula una permutación.
Devuelve la -permutación de , o la cantidad de maneras de elegir elementos de un conjunto de teniendo en cuenta el orden, definida de la siguiente manera:
Ver ejemplo
#calc.perm(5, 3)

base
El valor de : la cantidad de elementos entre los que se elige. Debe ser no negativo.
numbers
El valor de : la cantidad de elementos que se eligen. Debe ser no negativo.
binomDesde: 0.3.0
Calcula un coeficiente binomial.
Devuelve la -combinación de , o la cantidad de maneras de elegir elementos de un conjunto de sin tener en cuenta el orden, definida de la siguiente manera:
Ver ejemplo
#calc.binom(10, 5)

n
El valor de : la cantidad de elementos entre los que se elige. Debe ser no negativo.
k
El valor de : la cantidad de elementos que se eligen. Debe ser no negativo.
gcdDesde: 0.3.0
Calcula el máximo común divisor de dos enteros.
Producirá un error si el resultado de la división entera fuera mayor que el máximo entero con signo de 64 bits.
Ver ejemplo
#calc.gcd(7, 42)

a
El primer entero.
b
El segundo entero.
lcmDesde: 0.3.0
Calcula el mínimo común múltiplo de dos enteros.
Ver ejemplo
#calc.lcm(96, 13)

a
El primer entero.
b
El segundo entero.
floorDesde: siempre
Redondea un número hacia abajo al entero más cercano.
Si el número ya es un entero, se devuelve sin cambios.
Tené en cuenta que esta función siempre devuelve un entero y producirá un error si el float o decimal resultante es mayor que el máximo entero con signo de 64 bits o menor que el mínimo de ese tipo.
Ver ejemplo
#calc.floor(500.1)
#assert(calc.floor(3) == 3)
#assert(calc.floor(3.14) == 3)
#assert(calc.floor(decimal("-3.14")) == -4)

value
El número que se redondea hacia abajo.
ceilDesde: siempre
Redondea un número hacia arriba al entero más cercano.
Si el número ya es un entero, se devuelve sin cambios.
Tené en cuenta que esta función siempre devuelve un entero y producirá un error si el float o decimal resultante es mayor que el máximo entero con signo de 64 bits o menor que el mínimo de ese tipo.
Ver ejemplo
#calc.ceil(500.1)
#assert(calc.ceil(3) == 3)
#assert(calc.ceil(3.14) == 4)
#assert(calc.ceil(decimal("-3.14")) == -3)

value
El número que se redondea hacia arriba.
truncDesde: 0.3.0
Devuelve la parte entera de un número.
Si el número ya es un entero, se devuelve sin cambios.
Tené en cuenta que esta función siempre devuelve un entero y producirá un error si el float o decimal resultante es mayor que el máximo entero con signo de 64 bits o menor que el mínimo de ese tipo.
Ver ejemplo
#calc.trunc(15.9)
#assert(calc.trunc(3) == 3)
#assert(calc.trunc(-3.7) == -3)
#assert(calc.trunc(decimal("8493.12949582390")) == 8493)

value
El número que se trunca.
fractDesde: 0.3.0
Devuelve la parte fraccionaria de un número.
Si el número es un entero, devuelve 0.
Ver ejemplo
#calc.fract(-3.1)
#assert(calc.fract(3) == 0)
#assert(calc.fract(decimal("234.23949211")) == decimal("0.23949211"))

value
El número que se trunca.
roundDesde: siempre
Redondea un número al entero más cercano.
Los valores intermedios (con parte fraccionaria de un medio) se redondean alejándose de cero.
Opcionalmente, se puede especificar una cantidad de decimales. Si es negativa, su valor absoluto indicará la cantidad de dígitos enteros significativos que se eliminan antes del punto decimal.
Tené en cuenta que esta función devuelve el mismo tipo que el operando. Es decir, aplicar round a un float devuelve un float y aplicarlo a un decimal devuelve otro decimal. Podés convertir explícitamente la salida de esta función en un entero con int, pero tené en cuenta que esa conversión producirá un error si el float o decimal es mayor que el máximo entero con signo de 64 bits o menor que el entero mínimo.
Además, esta función puede producir un error si se intenta redondear más allá del entero o decimal máximo o mínimo. Si el número es un float, ese intento hará que se devuelva calc.inf o -calc.inf para el máximo y el mínimo, respectivamente.
Ver ejemplo
#calc.round(3.1415, digits: 2)
#assert(calc.round(3) == 3)
#assert(calc.round(3.14) == 3)
#assert(calc.round(3.5) == 4.0)
#assert(calc.round(3333.45, digits: -2) == 3300.0)
#assert(calc.round(-48953.45, digits: -3) == -49000.0)
#assert(calc.round(3333, digits: -2) == 3300)
#assert(calc.round(-48953, digits: -3) == -49000)
#assert(calc.round(decimal("-6.5")) == decimal("-7"))
#assert(calc.round(decimal("7.123456789"), digits: 6) == decimal("7.123457"))
#assert(calc.round(decimal("3333.45"), digits: -2) == decimal("3300"))
#assert(calc.round(decimal("-48953.45"), digits: -3) == decimal("-49000"))

value
El número que se redondea.
digitsPor defecto: 0
Si es positivo, la cantidad de decimales.
Si es negativo, la cantidad de dígitos enteros significativos que se deben eliminar antes del punto decimal.
clampDesde: siempre
Limita un número entre un valor mínimo y uno máximo.
Ver ejemplo
#calc.clamp(5, 0, 4)
#assert(calc.clamp(5, 0, 10) == 5)
#assert(calc.clamp(5, 6, 10) == 6)
#assert(calc.clamp(decimal("5.45"), 2, decimal("45.9")) == decimal("5.45"))
#assert(calc.clamp(decimal("5.45"), decimal("6.75"), 12) == decimal("6.75"))

value
El número que se limita.
min
El valor mínimo inclusivo.
max
El valor máximo inclusivo.
minDesde: siempre
Determina el mínimo de una secuencia de valores.
Ver ejemplo
#calc.min(1, -3, -5, 20, 3, 6) \
#calc.min("typst", "is", "cool")

valuesanyObligatorioPosicionalVariádico
La secuencia de valores de la que se extrae el mínimo. No debe estar vacía.
maxDesde: siempre
Determina el máximo de una secuencia de valores.
Ver ejemplo
#calc.max(1, -3, -5, 20, 3, 6) \
#calc.max("typst", "is", "cool")

valuesanyObligatorioPosicionalVariádico
La secuencia de valores de la que se extrae el máximo. No debe estar vacía.
evenDesde: siempre
Determina si un entero es par.
Ver ejemplo
#calc.even(4) \
#calc.even(5) \
#range(10).filter(calc.even)

value
El número cuya paridad se comprueba.
oddDesde: siempre
Determina si un entero es impar.
Ver ejemplo
#calc.odd(4) \
#calc.odd(5) \
#range(10).filter(calc.odd)

value
El número cuya imparidad se comprueba.
remDesde: 0.3.0
Calcula el resto de dos números (módulo con signo).
El valor de calc.rem(x, y) siempre tiene el mismo signo que x y es menor en magnitud que y.
Puede producir un error si se le da una entrada decimal y el dividendo es demasiado pequeño en magnitud en comparación con el divisor.
Ver ejemplo
#calc.rem(7, 3) \
#calc.rem(7, -3) \
#calc.rem(-7, 3) \
#calc.rem(-7, -3) \
#calc.rem(1.75, 0.5)

dividend
El dividendo del resto.
divisor
El divisor del resto.
div-euclidDesde: 0.10.0
Realiza la división euclidiana de dos números.
El resultado de este cálculo es el de una división redondeada al entero n tal que el dividendo es mayor o igual que n veces el divisor.
Puede producir un error si el número resultante es mayor que el valor máximo o menor que el valor mínimo de su tipo.
Ver ejemplo
#calc.div-euclid(7, 3) \
#calc.div-euclid(7, -3) \
#calc.div-euclid(-7, 3) \
#calc.div-euclid(-7, -3) \
#calc.div-euclid(1.75, 0.5) \
#calc.div-euclid(decimal("1.75"), decimal("0.5"))

dividend
El dividendo de la división.
divisor
El divisor de la división.
rem-euclidDesde: 0.10.0
Calcula el menor resto no negativo de una división (módulo no negativo).
Advertencia: debido a un error de redondeo de punto flotante, el resto puede ser igual al valor absoluto del divisor si el dividendo es mucho menor en magnitud que el divisor y el dividendo es negativo. Esto solo se aplica a entradas de punto flotante.
Además, puede producir un error si se le da una entrada decimal y el dividendo es demasiado pequeño en magnitud en comparación con el divisor.
Ver ejemplo
#calc.rem-euclid(7, 3) \
#calc.rem-euclid(7, -3) \
#calc.rem-euclid(-7, 3) \
#calc.rem-euclid(-7, -3) \
#calc.rem-euclid(1.75, 0.5) \
#calc.rem-euclid(decimal("1.75"), decimal("0.5"))

dividend
El dividendo del resto.
divisor
El divisor del resto.
quoDesde: 0.3.0
Calcula el cociente (división con redondeo hacia abajo) de dos números.
Tené en cuenta que esta función siempre devuelve un entero y producirá un error si el número resultante es mayor que el máximo entero con signo de 64 bits o menor que el mínimo de ese tipo.
Ver ejemplo
$ "quo"(a, b) &= floor(a/b) \
"quo"(14, 5) &= #calc.quo(14, 5) \
"quo"(3.46, 0.5) &= #calc.quo(3.46, 0.5) $

dividend
El dividendo del cociente.
divisor
El divisor del cociente.
normDesde: 0.13.0
Calcula la norma de una secuencia de valores.
La norma de se define de la siguiente manera:
Ver ejemplo
#calc.norm(1, 2, -3, 0.5) \
#calc.norm(p: 3, 1, 2)

pPor defecto: 2.0
El valor de . Debe ser mayor que cero.
El valor por defecto 2.0 corresponde a la norma euclidiana:
values
La secuencia de valores cuya norma se calcula. Devuelve 0.0 si está vacía.