Skip to content

Instantly share code, notes, and snippets.

@senhorinha
Last active December 21, 2015 22:09
Show Gist options
  • Save senhorinha/6373673 to your computer and use it in GitHub Desktop.
Save senhorinha/6373673 to your computer and use it in GitHub Desktop.
Trabalho de Cálculo Numérico proposto por Prof. Sérgio Peters. Descrição no Comentário.
import java.math.BigDecimal;
public class AproximadorDeEPorSerieDeTaylor {
public static final int ORDEM_DO_MAIOR_PARA_O_MENOR = 1;
public static final int ORDEM_DO_MENOR_PARA_O_MAIOR = 2;
public float aproximaComPrecisao32bits(int n, int x, int ordem) {
float resultado = 1;
switch (ordem) {
case ORDEM_DO_MAIOR_PARA_O_MENOR:
for (int i = 1; i <= n; i++) {
resultado += Math.pow(x, i) / fatorial(i);
}
return resultado;
case ORDEM_DO_MENOR_PARA_O_MAIOR:
for (int i = n; i >= 1; i--) {
resultado += Math.pow(x, i) / fatorial(i);
}
return resultado;
}
return resultado;
}
public double aproximaComPrecisao64bits(int n, int x, int ordem) {
double resultado = 1;
switch (ordem) {
case ORDEM_DO_MAIOR_PARA_O_MENOR:
for (int i = 1; i <= n; i++) {
resultado += Math.pow(x, i) / fatorial(i);
}
return resultado;
case ORDEM_DO_MENOR_PARA_O_MAIOR:
for (int i = n; i >= 1; i--) {
resultado += Math.pow(x, i) / fatorial(i);
}
return resultado;
}
return resultado;
}
private double fatorial(int n) {
if (n == 1 || n == 0) {
return 1;
}
return n * (fatorial(n - 1));
}
public BigDecimal calculaErroExato(int n, int x, int ordem) {
BigDecimal valorQuaseExato = BigDecimal
.valueOf(2.718281828459045235360287471352662497757247093699959574966967);
BigDecimal valorAproximado = BigDecimal
.valueOf(aproximaComPrecisao32bits(n, x, ordem));
return valorQuaseExato.subtract(valorAproximado).abs();
}
// ErroArred = | VA32bits,n - VE64bits,n| ;
public double calculaErroDeArredondamento(int n, int x, int ordem) {
float valorAproximado = aproximaComPrecisao32bits(n, x, ordem);
double valorEstimado = aproximaComPrecisao64bits(n, x, ordem);
return Math.abs(valorAproximado - valorEstimado);
}
// ErroTruncam=| VA64bits,n - VE64bits,2*n |
public double calculaErroDeTruncamento(int n, int x, int ordem) {
double valorAproximado = aproximaComPrecisao64bits(n, x, ordem);
double valorEstimado = aproximaComPrecisao64bits(2 * n, x, ordem);
return Math.abs(valorAproximado - valorEstimado);
}
// ErroTotal= |VA32bits,n - VE64bits,2*n |
public double calculaErroTotal(int n, int x, int ordem) {
float valorAproximado = aproximaComPrecisao32bits(n, x, ordem);
double valorEstimado = aproximaComPrecisao64bits(2 * n, x, ordem);
return Math.abs(valorAproximado - valorEstimado);
}
public static void main(String[] args) {
imprimeQuestoes();
AproximadorDeEPorSerieDeTaylor a = new AproximadorDeEPorSerieDeTaylor();
System.out.println("--- RESPOSTAS DO MAIOR PARA O MENOR ---");
System.out.println();
System.out.println("A) O erro exato calculado foi "
+ a.calculaErroExato(7, 1, ORDEM_DO_MAIOR_PARA_O_MENOR));
System.out.println();
System.out.println("B) Erro de Arredondamento : "
+ a.calculaErroDeArredondamento(7, 1,
ORDEM_DO_MAIOR_PARA_O_MENOR));
System.out
.println(" Erro de Truncamento : "
+ a.calculaErroDeTruncamento(7, 1,
ORDEM_DO_MAIOR_PARA_O_MENOR));
System.out.println(" Erro Total : "
+ a.calculaErroTotal(7, 1, ORDEM_DO_MAIOR_PARA_O_MENOR));
System.out.println();
System.out.println("--- RESPOSTAS DO MENOR PARA O MAIOR ---");
System.out.println();
System.out.println("A) O erro exato calculado foi "
+ a.calculaErroExato(7, 1, ORDEM_DO_MENOR_PARA_O_MAIOR));
System.out.println();
System.out.println("B) Erro de Arredondamento : "
+ a.calculaErroDeArredondamento(7, 1,
ORDEM_DO_MENOR_PARA_O_MAIOR));
System.out
.println(" Erro de Truncamento : "
+ a.calculaErroDeTruncamento(7, 1,
ORDEM_DO_MENOR_PARA_O_MAIOR));
System.out.println(" Erro Total : "
+ a.calculaErroTotal(7, 1, ORDEM_DO_MENOR_PARA_O_MAIOR));
}
private static void imprimeQuestoes() {
System.out
.println("Dado e1 = 2.718281828459045235360287471352662497757247093699959574966967...");
System.out.println();
System.out
.println("a). Calcule o Erro exato cometido quando se aproxima , via série de Taylor, usando até o termo de ordem 'n=7’, para x=1, em uma variável IEEE de 32 bits (tipo float);");
System.out.println();
System.out
.println("b). Calcule os erros Estimados de Arredondamento, Truncamento e Total, quando não dispomos do valor exato.");
System.out.println();
}
}
@senhorinha
Copy link
Author

Dado e1 = 2.718281828459045235360287471352662497757247093699959574966967... EXATO.

a1). Calcule o Erro exato cometido quando se aproxima ex, via série de Taylor (somando do maior para o menor termo), usando até o termo de ordem 'n=7’, para x=1, em uma variável IEEE de 32 bits (tipo float);

a2). Calcule o Erro exato cometido quando se aproxima ex, via série de Taylor (somando do menor para o maior termo), usando até o termo de ordem 'n=7’, para x=1, em uma variável IEEE de 32 bits (tipo float);

b1). Calcule os erros Estimados de Arredondamento, Truncamento e Total, quando não dispomos do valor exato. Aproxime ex=1, via série de Taylor, somando do maior para o menor termo;

b2). Calcule os erros Estimados de Arredondamento, Truncamento e Total, quando não dispomos do valor exato. Aproxime ex=1, via série de Taylor, somando do menor para o maior termo.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment