В C функция pow () принимает и возвращает значения с плавающей запятой двойной точности, которые являются приблизительными.
В Python оператор ** выполняет операцию, используя Python целые числа, увеличиваются в размере (память, используемая для хранения значения). Если перед операцией вы принудительно использовали числа с плавающей запятой, вы, вероятно, получили бы те же результаты.
В C вы можете попробовать написать другую функцию мощности, которая работала бы с uint64_t (unsigned long long), и увидеть если это сработает.