Introdução
Neste laboratório, aprenderemos a aproximar a Taxa Interna de Retorno (TIR) usando um programa em C. Começaremos lendo os fluxos de caixa, que representam o dinheiro investido ou recebido em diferentes períodos de tempo de um investimento. Em seguida, usaremos uma abordagem iterativa para encontrar a taxa em que o Valor Presente Líquido (VPL) é aproximadamente zero, o que nos dá a TIR estimada. Finalmente, imprimiremos a TIR calculada. O laboratório abrange conceitos-chave de matemática financeira e demonstra sua implementação na programação em C.
Leitura de Fluxos de Caixa
Neste passo, aprenderemos a ler e armazenar fluxos de caixa para calcular a Taxa Interna de Retorno (TIR) em um programa em C. Os fluxos de caixa representam o dinheiro investido ou recebido em diferentes períodos de tempo de um investimento.
Primeiro, vamos criar um arquivo C para implementar a funcionalidade de leitura de fluxos de caixa:
cd ~/project
nano irr_calculation.c
Agora, vamos escrever o código inicial para ler os fluxos de caixa:
#include <stdio.h>
#define MAX_FLUXOS_CAIXA 10
int main() {
double fluxos_caixa[MAX_FLUXOS_CAIXA];
int num_fluxos_caixa;
printf("Digite o número de fluxos de caixa (máximo %d): ", MAX_FLUXOS_CAIXA);
scanf("%d", &num_fluxos_caixa);
printf("Digite os fluxos de caixa (negativo para investimentos, positivo para retornos):\n");
for (int i = 0; i < num_fluxos_caixa; i++) {
printf("Fluxo de caixa %d: ", i);
scanf("%lf", &fluxos_caixa[i]);
}
// Imprimir os fluxos de caixa inseridos para verificação
printf("\nFluxos de Caixa Digitados:\n");
for (int i = 0; i < num_fluxos_caixa; i++) {
printf("Fluxo de caixa %d: %.2f\n", i, fluxos_caixa[i]);
}
return 0;
}
Compile e execute o programa:
gcc irr_calculation.c -o irr_calculation
./irr_calculation
Exemplo de saída:
Digite o número de fluxos de caixa (máximo 10): 4
Digite os fluxos de caixa (negativo para investimentos, positivo para retornos):
Fluxo de caixa 0: -1000
Fluxo de caixa 1: 300
Fluxo de caixa 2: 400
Fluxo de caixa 3: 500
Fluxos de Caixa Digitados:
Fluxo de caixa 0: -1000.00
Fluxo de caixa 1: 300.00
Fluxo de caixa 2: 400.00
Fluxo de caixa 3: 500.00
Explicação
- Definimos um número máximo de fluxos de caixa (
MAX_FLUXOS_CAIXA) para evitar uso excessivo de memória. - O programa primeiro solicita ao usuário a entrada do número de fluxos de caixa.
- Em seguida, solicita ao usuário que digite cada valor do fluxo de caixa.
- Valores negativos representam investimentos iniciais.
- Valores positivos representam retornos ou receitas.
- O programa imprime os fluxos de caixa inseridos para verificação.
Usando Iteração para Encontrar a Taxa Onde o VPL ≈ 0
Neste passo, estenderemos nosso programa anterior de fluxo de caixa para calcular a Taxa Interna de Retorno (TIR) usando um método numérico iterativo.
Primeiro, vamos modificar nosso arquivo C existente:
cd ~/project
nano irr_calculation.c
Agora, implemente a lógica de cálculo do VPL e da TIR:
#include <stdio.h>
#include <math.h>
#define MAX_FLUXOS_CAIXA 10
#define EPSILON 0.0001
double calculate_npv(double cash_flows[], int num_cash_flows, double taxa) {
double vpl = 0.0;
for (int i = 0; i < num_cash_flows; i++) {
vpl += cash_flows[i] / pow(1 + taxa, i);
}
return vpl;
}
double find_irr(double cash_flows[], int num_cash_flows) {
double taxa_baixa = -0.9;
double taxa_alta = 10.0;
double taxa = 0.1;
while ((taxa_alta - taxa_baixa) > EPSILON) {
double vpl = calculate_npv(cash_flows, num_cash_flows, taxa);
if (fabs(vpl) < EPSILON) {
return taxa;
}
if (vpl > 0) {
taxa_baixa = taxa;
} else {
taxa_alta = taxa;
}
taxa = (taxa_baixa + taxa_alta) / 2.0;
}
return taxa;
}
int main() {
double cash_flows[MAX_FLUXOS_CAIXA];
int num_cash_flows;
printf("Digite o número de fluxos de caixa (máximo %d): ", MAX_FLUXOS_CAIXA);
scanf("%d", &num_cash_flows);
printf("Digite os fluxos de caixa (negativo para investimentos, positivo para retornos):\n");
for (int i = 0; i < num_cash_flows; i++) {
printf("Fluxo de caixa %d: ", i);
scanf("%lf", &cash_flows[i]);
}
double tir = find_irr(cash_flows, num_cash_flows);
printf("\nTaxa Interna de Retorno (TIR) Aproximada: %.4f ou %.2f%%\n", tir, tir * 100);
return 0;
}
Compile o programa com a biblioteca matemática:
gcc irr_calculation.c -o irr_calculation -lm
Execute o programa com fluxos de caixa de exemplo:
./irr_calculation
Exemplo de saída:
Digite o número de fluxos de caixa (máximo 10): 4
Digite os fluxos de caixa (negativo para investimentos, positivo para retornos):
Fluxo de caixa 0: -1000
Fluxo de caixa 1: 300
Fluxo de caixa 2: 400
Fluxo de caixa 3: 500
Taxa Interna de Retorno (TIR) Aproximada: 0.2154 ou 21.54%
Explicação
calculate_npv()calcula o Valor Presente Líquido (VPL) para uma taxa de juros dada.find_irr()usa o método da bissecção para encontrar a taxa onde o VPL ≈ 0.- Usamos
EPSILONpara definir a precisão de convergência. - O algoritmo reduz iterativamente o intervalo da TIR.
- A TIR final é calculada e exibida como decimal e porcentagem.
Imprimir TIR Estimada
Neste passo final, aprimoraremos nosso programa de cálculo de TIR para fornecer uma saída mais detalhada e demonstrar diferentes cenários de investimento.
Vamos modificar nosso arquivo C existente para adicionar uma análise de TIR mais abrangente:
cd ~/project
nano irr_calculation.c
Atualize o código com saída e análise adicionais:
#include <stdio.h>
#include <math.h>
#define MAX_FLUXOS_CAIXA 10
#define EPSILON 0.0001
double calculate_npv(double cash_flows[], int num_cash_flows, double taxa) {
double vpl = 0.0;
for (int i = 0; i < num_cash_flows; i++) {
vpl += cash_flows[i] / pow(1 + taxa, i);
}
return vpl;
}
double find_irr(double cash_flows[], int num_cash_flows) {
double taxa_baixa = -0.9;
double taxa_alta = 10.0;
double taxa = 0.1;
while ((taxa_alta - taxa_baixa) > EPSILON) {
double vpl = calculate_npv(cash_flows, num_cash_flows, taxa);
if (fabs(vpl) < EPSILON) {
return taxa;
}
if (vpl > 0) {
taxa_baixa = taxa;
} else {
taxa_alta = taxa;
}
taxa = (taxa_baixa + taxa_alta) / 2.0;
}
return taxa;
}
void print_investment_analysis(double cash_flows[], int num_cash_flows, double tir) {
double investimento_total = 0;
double retorno_total = 0;
printf("\n--- Análise de Investimento ---\n");
// Detalhes dos fluxos de caixa
for (int i = 0; i < num_cash_flows; i++) {
printf("Período %d: $%.2f\n", i, cash_flows[i]);
if (cash_flows[i] < 0) {
investimento_total += fabs(cash_flows[i]);
} else {
retorno_total += cash_flows[i];
}
}
// Resumo do investimento
printf("\nInvestimento Total: $%.2f\n", investimento_total);
printf("Retornos Totais: $%.2f\n", retorno_total);
printf("Lucro Líquido: $%.2f\n", retorno_total - investimento_total);
// Detalhes da TIR
printf("\nTaxa Interna de Retorno (TIR):\n");
printf("Decimal: %.4f\n", tir);
printf("Porcentagem: %.2f%%\n", tir * 100);
// Interpretação do desempenho do investimento
if (tir > 0.15) {
printf("\nDesempenho do Investimento: Excelente\n");
} else if (tir > 0.10) {
printf("\nDesempenho do Investimento: Bom\n");
} else if (tir > 0) {
printf("\nDesempenho do Investimento: Moderado\n");
} else {
printf("\nDesempenho do Investimento: Ruim\n");
}
}
int main() {
double cash_flows[MAX_FLUXOS_CAIXA];
int num_cash_flows;
printf("Digite o número de fluxos de caixa (máximo %d): ", MAX_FLUXOS_CAIXA);
scanf("%d", &num_cash_flows);
printf("Digite os fluxos de caixa (negativo para investimentos, positivo para retornos):\n");
for (int i = 0; i < num_cash_flows; i++) {
printf("Fluxo de caixa %d: ", i);
scanf("%lf", &cash_flows[i]);
}
double tir = find_irr(cash_flows, num_cash_flows);
print_investment_analysis(cash_flows, num_cash_flows, tir);
return 0;
}
Compile o programa:
gcc irr_calculation.c -o irr_calculation -lm
Execute o programa com o cenário de investimento de exemplo:
./irr_calculation
Exemplo de saída:
Digite o número de fluxos de caixa (máximo 10): 4
Digite os fluxos de caixa (negativo para investimentos, positivo para retornos):
Fluxo de caixa 0: -1000
Fluxo de caixa 1: 300
Fluxo de caixa 2: 400
Fluxo de caixa 3: 500
--- Análise de Investimento ---
Período 0: $-1000.00
Período 1: $300.00
Período 2: $400.00
Período 3: $500.00
Investimento Total: $1000.00
Retornos Totais: $1200.00
Lucro Líquido: $200.00
Taxa Interna de Retorno (TIR):
Decimal: 0.2154
Porcentagem: 21.54%
Desempenho do Investimento: Excelente
Explicação
- Função
print_investment_analysis()adicionada para fornecer saída abrangente. - Calcula o investimento total, retornos e lucro líquido.
- Interpreta o desempenho da TIR com categorias descritivas.
- Fornece uma quebra detalhada dos fluxos de caixa e métricas de investimento.
Resumo
Neste laboratório, aprendemos inicialmente como ler e armazenar fluxos de caixa para calcular a Taxa Interna de Retorno (TIR) em um programa C. Os fluxos de caixa representam o dinheiro investido ou recebido em diferentes períodos de tempo de um investimento. Em seguida, exploramos o uso de iteração para encontrar a taxa em que o Valor Presente Líquido (VPL) é aproximadamente zero, que é a TIR. Finalmente, aprendemos a imprimir a TIR estimada. Os principais pontos de aprendizado são a compreensão das estruturas de dados de fluxo de caixa, a implementação de algoritmos iterativos para encontrar a TIR e a apresentação do resultado final.



