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.