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.