Return double to avoid long overflow