added double precision

added support for double precision operations. nvcc should handle downgrading precision for devices that dont support double. not tested on non-compatible devices though. you may need to add a flag to nvcc in the makefile