What's the issue with just doing the double cast? It should still be functionally identical for longs, right? Or is the concern here that convert_to_double_ex is rather inefficient? (In which case we should finally add functions for extracting lval/dval without modifying any zvals).