The function does not calculate groups, it sets groups access list of the current process in accordance to user information in /etc/groups.
Quote from Unix manual page for initgroups:
NAME
       initgroups - initialize the supplementary group access list
...
DESCRIPTION
       The  initgroups()  function  initializes  the  group  access  list  by  reading the 
       group database /etc/group and using all groups of which user is a member. 
       The additional  group  group  is  also added to the list.