@yo para este ejemplo asume que sí. Debería poner protecciones al respecto y tal pero quería que quedara limpio para que se entendiera.
La idea es esa: recibir cualquier tipo numérico, castearlo a double, llamar a la función y castear de vuelta al tipo recibido el resultado.
Además que como luego uso reflects para guardar el valor, es importante que el tipo devuelto sea el que tiene que ser.