A função redonda em C

Jinku Hu 12 outubro 2023
  1. Use a função round para arredondar o número de ponto flutuante para o número inteiro mais próximo e retornar o número de ponto flutuante
  2. Use a função lround para arredondar o número de ponto flutuante para o inteiro mais próximo e retornar o tipo integral
  3. Use a função ceil para arredondar o número de ponto flutuante para o menor valor integral não inferior ao argumento
A função redonda em C

Este artigo irá explicar vários métodos de como usar a função arredondar em C.

Use a função round para arredondar o número de ponto flutuante para o número inteiro mais próximo e retornar o número de ponto flutuante

A função round é parte dos utilitários matemáticos da biblioteca padrão C definidos no arquivo de cabeçalho <math.h>. Existem três funções nesta família - round, roundf e roundl. Essas funções são para diferentes tipos de números de ponto flutuante e cada uma retorna o valor de tipo correspondente. Observe que os arquivos de origem, incluindo o cabeçalho math, precisam ser compilados usando o sinalizador -lm para vincular o código da biblioteca. No código de exemplo a seguir, demonstramos as conversões para vários valores literais float e emitimos os resultados para o console. Observe que round essencialmente arredonda a partir de zero. Se o valor integral, -0, +0, NaN ou INFINITY for passado como um argumento, o mesmo valor será retornado.

#include <fenv.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

int main(void) {
  printf("round(+2.3) = %+.1f\n", round(2.3));
  printf("round(+2.5) = %+.1f\n", round(2.5));
  printf("round(+2.7) = %+.1f\n", round(2.7));
  printf("round(-2.3) = %+.1f\n", round(-2.3));
  printf("round(-2.5) = %+.1f\n", round(-2.5));
  printf("round(-2.7) = %+.1f\n", round(-2.7));

  exit(EXIT_SUCCESS);
}

Resultado:

round(+2.3) = +2.0
round(+2.5) = +3.0
round(+2.7) = +3.0
round(-2.3) = -2.0
round(-2.5) = -3.0
round(-2.7) = -3.0

Use a função lround para arredondar o número de ponto flutuante para o inteiro mais próximo e retornar o tipo integral

A função lround, por outro lado, arredonda para o inteiro mais próximo e retorna o valor integral. Existem seis funções nesta família, a metade das quais retorna long int como valor arredondado e outras - long long int. lround semelhante à família round arredonda a metade dos números reais de zero.

#include <fenv.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

int main(void) {
  printf("lround(+2.3) = %ld\n", lround(2.3));
  printf("lround(+2.5) = %ld\n", lround(2.5));
  printf("lround(+2.7) = %ld\n", lround(2.7));
  printf("lround(-2.3) = %ld\n", lround(-2.3));
  printf("lround(-2.5) = %ld\n", lround(-2.5));
  printf("lround(-2.7) = %ld\n", lround(-2.7));

  exit(EXIT_SUCCESS);
}

Resultado:

lround(+2.3) = 2
lround(+2.5) = 3
lround(+2.7) = 3
lround(-2.3) = -2
lround(-2.5) = -3
lround(-2.7) = -3

Use a função ceil para arredondar o número de ponto flutuante para o menor valor integral não inferior ao argumento

Alternativamente, a função ceil pode ser utilizada para arredondar o número de ponto flutuante fornecido para o menor valor inteiro que não seja menor que o próprio argumento. Semelhante à função redondo, existem três funções também nesta família - ceil, ceilf e ceill para serem usados ​​para os tipos float, double e long double, respetivamente. Observe que incluímos o sinal + na string do especificador prinf e ele exibe automaticamente os sinais correspondentes para os argumentos arredondados.

#include <fenv.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

int main(void) {
  printf("ceil(+2.3) = %+.1f\n", ceil(2.3));
  printf("ceil(+2.5) = %+.1f\n", ceil(2.5));
  printf("ceil(+2.7) = %+.1f\n", ceil(2.7));
  printf("ceil(-2.3) = %+.1f\n", ceil(-2.3));
  printf("ceil(-2.5) = %+.1f\n", ceil(-2.5));
  printf("ceil(-2.7) = %+.1f\n", ceil(-2.7));

  exit(EXIT_SUCCESS);
}

Resultado:

ceil(+2.3) = 3.000000
ceil(+2.5) = 3.000000
ceil(+2.7) = 3.000000
ceil(-2.3) = -2.000000
ceil(-2.5) = -2.000000
ceil(-2.7) = -2.000000
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artigo relacionado - C Math