@Mythonian:
The wiki should not use a bell curve, that's indeed misleading (or: implicitly assuming a (non-standard!) kill-rate of 50%).
That means that even in 100% luck, getting wide variance like killing 0 is not simply the standard bell curve, but also you must take into account the random number which would need to be interpolated together with it.
Example, we're doing an attack; "expected-value" says "kill 8" and (digitally) throwing a few dices gives (for this particular attack!) makes "luck" say "kill 0".
I haven't yet told you what luck modifier this game uses, but you already know this attack will kill somewhere between 0 (inclusive) and 8 (inclusive) armies. On standard 75% luck we'd get 75% * 0 + 25% * 8 = 2 kills. But in the extreme case of 100% luck, the interpolation is degenerated into simply taking the "luck" value. Of course, technically it's still an interpolation: 100% * 0 + 0% * 8 = 0 kills, but it might not "feel" like an interpolation. I think this is were your misunderstanding comes from.
In practice, for more-or-less large numbers, it practically never happens all the roles fails, so you're incredibly unlikely to ever
see it happening, even if it theoretically could. For instance, a 100-vs-1 attack, with 50% kill rate and 100% luck fails with chance 1 / ( 1/2 ^ 100 ), quite literally a one-in-a-million chance (or "1 in 1048576" if you're feeling pedantic ;) ).
On the other hand, especially for small numbers, it's not necessary to kill 0.000 armies; anything strictly smaller than 1 has a chance of being rounded to 0 (on stochastic round) / anything strictly smaller than 0.5 will always be rounded to 0 (on straight round).
@kszyhoo:
If you write your own code (and can use something called "Extended precision floating point numbers", 16378 armies will work, 16379 armies will fail. The problem is not with the final result of the calculation, that's a (relatively) small number. The problem is halfway through the calculation, you have to work with insanely huge numbers, which simply get
too big to handle (without special tricks).
If you cannot use extended precision (but are stuck with double precision) you top out much sooner, but I don't have the exact number readily available.
Regarding your other question:
That looks symmetric around n = 50, did you use a kill rate of 50%? If so, yes, that's to be expected! You see, there's not that much of a difference between 99% luck and 100% luck. And 100% luck and a kill rate of 50% means you get a "Normal distribution" (also know as the "(Gaussian) bell curve"). Sure, in theory it's probability of any particular result never reaches zero, but more than two or three standard deviations from the middle, those chances get incredibly small.