1.9 Limitando a precisão

Arredondamento, truncamento e funções de piso e teto são métodos para escrever números com precisão limitada.

Arredondamento
Para arredondar um número para a \(k\)-ésima casa decimal, basta observar a \(k\)+1-ésima casa. Se a \(k\)+1-ésima casa decimal for 0, 1, 2, 3 ou 4, mantém-se a \(k\)-ésima casa decimal; se a \(k\)+1-ésima casa decimal for 5, 6, 7, 8 ou 9, soma-se 1 à \(k\)-ésima casa decimal.

Truncamento
Para truncar um número para a \(k\)-ésima casa decimal, basta eliminar a \(k\)+1-ésima casa decimal e suas subsequentes.

Piso e teto
Dados \(x,y \in \mathbb{R}\) e \(m,n \in \mathbb{Z}\), piso e teto podem ser definidos por

\[\begin{equation} \lfloor x \rfloor = \max \{m \in \mathbb{Z} \mid m \le x\} \tag{1.3} \end{equation}\]

\[\begin{equation} \lceil x \rceil = \min \{m \in \mathbb{Z} \mid m \ge x\} \tag{1.4} \end{equation}\]

Exercício 1.6 Leia por extenso as Eq. (1.3) e (1.4).

Exemplo 1.15 Arredondamento e truncamento.

Decimais Arredondamento Truncamento
6 153.654321 153.654321
5 153.65432 153.65432
4 153.6543 153.6543
3 153.654 153.654
2 153.65 153.65
1 153.7 153.6
0 154 153
-1 150 150
-2 200 100

Piso e teto.

\(\lfloor 153.654321 \rfloor = 153\)
\(\lceil 153.654321 \rceil = 154\)

# Usando base R
options(digits = 10) # Apresentando 10 dígitos (padrão: 7)
for(i in 6:-2){
  print(round(153.654321, dig = i)) # 'digits' casas decimais
} 
## [1] 153.654321
## [1] 153.65432
## [1] 153.6543
## [1] 153.654
## [1] 153.65
## [1] 153.7
## [1] 154
## [1] 150
## [1] 200
trunc <- function(x, ..., dig = 0){ # Improving the trunc() function
  base::trunc(x*10^dig, ...)/10^dig
}
for(i in 6:-2){
  print(trunc(153.654321, dig = i)) # Precisão de i casas decimais
}
## [1] 153.654321
## [1] 153.65432
## [1] 153.6543
## [1] 153.654
## [1] 153.65
## [1] 153.6
## [1] 153
## [1] 150
## [1] 100
floor(153.654321)   # Piso
## [1] 153
ceiling(153.654321) # Teto
## [1] 154

Exemplo 1.16 Em Python.

import math

# Ajustando para apresentação de 10 dígitos
pd.set_option("display.precision", 10) 

# 'digits' casas decimais
for i in range(6, -3, -1):
  print(round(153.654321, i))

# Aprimorando a função trunc()
def trunc(x, dig=0):
  return math.trunc(x * 10**dig) / 10**dig

# Precisão de i casas decimais
for i in range(6, -3, -1):
  print(trunc(153.654321, i))

# Piso
print(math.floor(153.654321)) # Output: 153

# Teto
print(math.ceil(153.654321))  # Output: 154