GCODE  Calculating E for a movement

I wanted to figure out how slicers are calculating the extruder value for their movements, I was hoping somebody could chime in with some of the methods used.
The shape of a layer seems to be something of a rounded rectangle with the maximum width becoming the line width and the height being the layer height. The only thing known for certain is the amount of distance involved. There is also a consideration for the die swell from the nozzle, but I would assume this is calibrated out of the equation.
For the purposes of discussion, I have brought out some slic3r code:
G1 X82.725 Y132.725
G1 X102.275 Y132.725 E1.59168This is with a 0.4mm nozzle, 0.2mm layer height, single width extrusion. The travel is distance is 19.55mm and it extrudes 1.59168mm^3 over that distance.
With it being a 20mm cube, it looks like it is assuming a line width of 0.45mm.
Two calculations being looked at will use the rectangle cross section as a model instead of the more complicated shape described above. First using line width and second using nozzle size:
0.45 * 0.2 * 19.55 = 1.7595 0.4 * 0.2 * 19.55 = 1.564
This second value is just slightly under the true value being used of 1.59168mm^3.
Can anyone shed some light on to some corrections to assumptions and calculations to figure out exactly what is going on?

This may be of interest to you. https://manual.slic3r.org/advanced/flowmath