Livro de respostas K&R, exercício 1.21

Aqui está a pergunta:

Escreva o entab do programa que substitui cadeias de espaços em branco pelo número mínimo de guias e espaços em branco para obter o mesmo espaçamento. Use as mesmas guias para detab. Quando uma guia ou um único espaço em branco é suficiente para alcançar uma parada de tabulação, qual deve ter preferência?

Eu mesmo fiz o exercício, e a resposta do livro tem uma solução diferente. Não estou entendendo uma fórmula matemática que é executada quando uma guia é lida no fluxo de entrada. Aqui está o código:

#include <stdio.h>
#define TABINC 8

main()
{
int c, nb, nt, pos;

nb = 0;
nt = 0;
for (pos = 1; (c =getchar()) != EOF; ++pos)
    if (c == ' '){
        if (pos % TABINC != 0)
            ++nb;
        else {
            nb = 0;
            ++nt;
        }
    }
    else {
        for ( ; nt > 0; --nt)
            putchar('\t');
        if (c == '\t')
            nb = 0;
        else
            for ( ; nb > 0; --nb)
                putchar(' ');
        putchar(c);
        if ( c == '\n')
            pos = 0;
        else if (c == '\t')
            pos = pos + (TABINC - (pos - 1) % TABINC) - 1;
    }
}

A parte que não estou entendendo é a seguinte:

else if (c == '\t')
    pos = pos + (TABINC - (pos - 1) % TABINC) - 1;

Eu posso ver através da depuração no visual studio que essa construção leva a pos para a próxima parada de guia quando uma guia ocorre no fluxo de entrada. Isso está correto?

O que eu realmente não entendo é como essa fórmula funciona ou como ela surgiu. Essa é uma fórmula comum que ocorre na programação? É útil? Isso tem um nome?

Edit: Eu entendo o que o operador do módulo faz. Me desculpe, eu não especifiquei isso.

questionAnswers(2)

yourAnswerToTheQuestion