This document describes an algorithm for calculating Fibonacci numbers in O(log n) time using matrix multiplication and fast doubling. It involves representing the Fibonacci sequence as a matrix and using the properties that F(2k) = F(k)[2F(k+1) - F(k)] and F(2k+1) = F(k+1)^2 + F(k)^2. Pseudocode and an ARM assembly implementation are provided. Examples are given to calculate F(10) using this fast doubling approach.