Ценное наблюдение: для того, чтобы целый результат, не лезущий в 32 бита, влез в 64 без искажения, недостаточно объявить итоговый результат типом int64_t. Надо и (в моем случае) один из множителей тоже привести к этому типу.
Правда, проблемы и сомнения в полученных результатах все равно есть. Но самые сомнительные куски уже выкинуты.