Pen width looks only half of the value set

I am trying to draw an arc with rounded ends. I know the step, drawArc and fillCircle. But I find the result isn't as my expectation.

var p = 16;
dc.setPenWidth(p);
dc.drawArc(layout[0], layout[0], layout[0], Gfx.ARC_COUNTER_CLOCKWISE, 60, 120);
var x = layout[0] + 0.5 * (layout[0] - p/2);
var y = layout[0] - (layout[0] - p/2) * 0.5 * Math.sqrt(3);
var x1 = layout[0] - 0.5 * (layout[0] - p/2);
dc.fillCircle(x, y, p/2);
dc.setColor(Graphics.COLOR_RED, Graphics.COLOR_RED);
dc.fillCircle(x1, y, p/2);

dc.drawArc(120, 120, 120, Gfx.ARC_CLOCKWISE, 120, 90);
dc.setPenWidth(1);
After mesurement, the arc width is only 8, how can it be?
On this occasion, the circle's radius should be p/4. So weird