Imprimir TIR Estimada
En este paso final, mejoraremos nuestro programa de cálculo de TIR para proporcionar una salida más detallada y demostrar diferentes escenarios de inversión.
Modifiquemos nuestro archivo C existente para agregar un análisis de TIR más completo:
cd ~/project
nano irr_calculation.c
Actualicemos el código con una salida y análisis adicionales:
#include <stdio.h>
#include <math.h>
#define MAX_FLUJOS_EFECTIVO 10
#define EPSILON 0.0001
double calculate_npv(double cash_flows[], int num_cash_flows, double rate) {
double npv = 0.0;
for (int i = 0; i < num_cash_flows; i++) {
npv += cash_flows[i] / pow(1 + rate, i);
}
return npv;
}
double find_irr(double cash_flows[], int num_cash_flows) {
double rate_low = -0.9;
double rate_high = 10.0;
double rate = 0.1;
while ((rate_high - rate_low) > EPSILON) {
double npv = calculate_npv(cash_flows, num_cash_flows, rate);
if (fabs(npv) < EPSILON) {
return rate;
}
if (npv > 0) {
rate_low = rate;
} else {
rate_high = rate;
}
rate = (rate_low + rate_high) / 2.0;
}
return rate;
}
void print_investment_analysis(double cash_flows[], int num_cash_flows, double irr) {
double total_investment = 0;
double total_returns = 0;
printf("\n--- Análisis de Inversión ---\n");
// Desglose detallado de los flujos de efectivo
for (int i = 0; i < num_cash_flows; i++) {
printf("Periodo %d: $%.2f\n", i, cash_flows[i]);
if (cash_flows[i] < 0) {
total_investment += fabs(cash_flows[i]);
} else {
total_returns += cash_flows[i];
}
}
// Resumen de la inversión
printf("\nInversión Total: $%.2f\n", total_investment);
printf("Retornos Totales: $%.2f\n", total_returns);
printf("Beneficio Neto: $%.2f\n", total_returns - total_investment);
// Detalles de la TIR
printf("\nTasa Interna de Retorno (TIR):\n");
printf("Decimal: %.4f\n", irr);
printf("Porcentaje: %.2f%%\n", irr * 100);
// Interpretación del rendimiento de la inversión
if (irr > 0.15) {
printf("\nRendimiento de la Inversión: Excelente\n");
} else if (irr > 0.10) {
printf("\nRendimiento de la Inversión: Bueno\n");
} else if (irr > 0) {
printf("\nRendimiento de la Inversión: Moderado\n");
} else {
printf("\nRendimiento de la Inversión: Deficiente\n");
}
}
int main() {
double cash_flows[MAX_FLUJOS_EFECTIVO];
int num_cash_flows;
printf("Ingrese el número de flujos de efectivo (máximo %d): ", MAX_FLUJOS_EFECTIVO);
scanf("%d", &num_cash_flows);
printf("Ingrese los flujos de efectivo (negativo para inversiones, positivo para retornos):\n");
for (int i = 0; i < num_cash_flows; i++) {
printf("Flujo de efectivo %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;
}
Compilar el programa:
gcc irr_calculation.c -o irr_calculation -lm
Ejecutar el programa con un escenario de inversión de muestra:
./irr_calculation
Ejemplo de salida:
... (Salida similar al ejemplo original)
Explicación
- Se agregó la función
print_investment_analysis() para proporcionar una salida completa.
- Calcula la inversión total, los retornos y el beneficio neto.
- Interpreta el rendimiento de la TIR con categorías descriptivas.
- Proporciona un desglose detallado de los flujos de efectivo y las métricas de inversión.