There exist a very huge number of possible crossover (and mutation) and the discussion about it is almost infinite. If you want to use that representation (vector of double) then you might want to look at the simulated binary crossover or blend crossover and gaussian mutation operator, they are most likely to help you to find children that are blends of their parent's genes rather than simple exchanges.
For example, the simulated binary with eta = 0.5 will give (there is randomization implied) from those two parents
[30 10 9]
[100 1 10]
[52 8 9]
[77 2 10]
Almost all major EC frameworks implement those operators like; Open Beagle, ECJ, DEAP, EO, etc.
Another approach - is not to use a genetic algorithm, but evolution strategy algorithms that change all genes in the chromosome. But this approach is feasible if the number of different gene versions is not very big. So this may not fit your problem with floats/doubles.