import java.lang.Math; import java.text.*; class Fibonacci3 { /** Print ascending members of the Fibonacci sequence that are representable as 64-bit signed integers, prefixed by their term numbers, and followed by the ratio of successive terms, to demonstrate the 1.618...^n growth (the ratio approaches the golden ratio, (1 + sqrt(5))/2 = 1.6180339887498949, and reaches it (to machine precision) at 41 terms: the fourth item on each line is the difference from the golden ratio). This program also shows the hoops that one must jump through in Java to get right-adjusted fixed-width output fields, a feature that is utterly trivial in C, C++, Pascal, and Fortran. The comma separators in the Java output are, however, a nice touch. :^) */ static final double golden_ratio = (1.0 + Math.sqrt(5.0))/2.0; private static String pad(String s, int pad_len) { if (s.length() >= pad_len) return (s); else { int nblanks = pad_len - s.length(); StringBuffer blanks = new StringBuffer(nblanks); blanks.setLength(nblanks); for (int k = 0; k < blanks.length(); ++k) blanks.setCharAt(k,' '); return (blanks + s); } } public static void main(String[] args) { long lo = 1L; long hi = 1L; long n = 1L; double ratio; DecimalFormat myFormat = (DecimalFormat)NumberFormat.getInstance(); myFormat.setMinimumIntegerDigits(1); myFormat.setMaximumIntegerDigits(2); myFormat.setMinimumFractionDigits(0); myFormat.setMaximumFractionDigits(0); System.out.print(myFormat.format(n)); System.out.print("\t"); myFormat.setMinimumIntegerDigits(1); myFormat.setMaximumIntegerDigits(19); System.out.println(pad(myFormat.format(lo),25)); while (hi > 0L) { n++; myFormat.setMinimumIntegerDigits(1); myFormat.setMaximumIntegerDigits(2); myFormat.setMinimumFractionDigits(0); myFormat.setMaximumFractionDigits(0); System.out.print(myFormat.format(n)); System.out.print("\t"); myFormat.setMinimumIntegerDigits(1); myFormat.setMaximumIntegerDigits(19); System.out.print(pad(myFormat.format(hi),25)); System.out.print("\t"); ratio = (double)hi/(double)lo; myFormat.setMinimumIntegerDigits(1); myFormat.setMaximumIntegerDigits(1); myFormat.setMinimumFractionDigits(16); myFormat.setMaximumFractionDigits(16); System.out.print(myFormat.format(ratio)); System.out.print("\t"); myFormat.setMinimumIntegerDigits(1); myFormat.setMaximumIntegerDigits(1); myFormat.setMinimumFractionDigits(16); myFormat.setMaximumFractionDigits(16); System.out.println(pad(myFormat.format(ratio - golden_ratio),19)); hi = lo + hi; lo = hi - lo; } } }