ESS LUNs are created in 10^9 GB sizes (0.1 increment)
DS6k/DS8k LUNs are created in 2^30 GB sizes (and best is to use 1GB increments, otherwise you're wasting space inside the DS6k/DS8k, because allocation is on 1GB boundaries)
SDDPCM assumes DS6k/DS8k LUNs and takes the disk size in MB, divides by 1024 to get GB value. So you get a wrong value if you use SDDPCM for ESS LUNs
SDD assumes ESS LUNs and takes disk size in MB, divides by 1000 to get GB value - again wrong values if SDD is used for DS6k/DS8k LUNs.
If your script uses bootinfo and divides by 1024 you should get a correct value which corresponds with the lsvg -p size.
Also, PV size will allways be a multiple of the PP size. For large PP size, you can lose some of the disk's MBs.
PP size of 128MB -> max loss is 127.999MB if the last PP doesn't fit.
a SCSI disk of 36GB is a bit more than 36400 MB (x 1000000) - at least that's what lscfg says - but put it in a VG and you start dividing it in 1024s instead of 1000s - this also gives a difference of 5%. In a 64MB PP VG you get 542 PPs = 34688 MBs (x 1024 x 1024) (diff of 4.7%)
HTH,
p5wizard