Last active
December 21, 2015 22:09
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.