Да - вы можете использовать функцию логарифма для этого.
С учетом вашего Java-кода вы можете написать:
public static double yearsNeeded(double initialValue, double growthRate, double purchasePrice) {
return Math.log(purchasePrice / initialValue) / Math.log(1 + growthRate);
}
с примером:
public static void main(String[] args) {
System.out.println("Years to go from 100 to 150 with a growth rate of 5%: "
+ yearsNeeded(100, .05, 150));
}
В основном вы пытаетесь решить для "лет":
initialValue * (1 + growthRate) ^ years = purchasePrice
где ^ означает возведение в степень.
Вы можете переписать это на:
(1 + growthRate) ^ years = purchasePrice / initialValue
, что превращается в:
years = [1 + growthRate] log (purchasePrice / initialValue)
, где основанием журнала является "1 + growthRate".И журнал другой базы такой же, как журнал в любой базе, деленный на журнал базы.