Currently, the way inaccuracy works for all projectile-based guns, as well as lasers in FtD, functions based on a rectangular, or uniform, distribution. This means that the azimuth and elevation axes are assigned a uniform inaccuracy, with all shells guaranteed to fall within the listed value.
This is, of course, unrealistic. Real cannons and ballistic systems of all kinds will usually have a Gaussian distribution, where shots will group more tightly towards the center with a few more spurious outliers.
{MATH AHEAD, PROCEED AT YOUR OWN PERIL}
variables going forward:
x = azimuth or elevation. Given the distribution for azimuth f(x), and the same for elevation g(x), the full distribution function h(θ, φ) = f(φ)*g(θ).
A = nominal inaccuracy value
σ = standard deviation
We can consider the inaccuracy distribution in FtD to be
F(x) = rect(x/2A)/2A.
This probability distribution describes a region from +A to -A, which integrates to 1.
It can be determined that given this function, the standard deviation is equal to
σ = A/sqrt(3).
Standard deviation can be best described as how inaccurate any particular distribution "feels."
Now, a Gaussian distribution function that has this same standard deviation can be produced, and is equal to:
G(x) = sqrt(3)•exp(-3x^2/2A^2)/(A•sqrt(2•pi))
Now, the obvious problem with the Gaussian distribution is that its domain stretches from positive to negative infinity. This means that there is an astronomically low, but nonzero chance of a given shell firing with an inaccuracy of 180 degrees and hitting its own cannon. To address this, I propose that any shot that would otherwise fire with an inaccuracy greater than 2A on either axis will instead be forced to fire with perfect accuracy. This covers the edge cases (there is approximately a 0.053% chance of shells falling outside 2A this way, and so it will not appreciably change the standard deviation.)