Мне интересно, действительно ли в Visual C ++ нет встроенной функции 128-битного деления?
Существует встроенная функция умножения 64x64 = 128 бит, называемая _umul128 ()
, которая хорошо соответствует инструкции ассемблера MUL
x64.
Естественно, я предполагал, что будет также внутреннее деление 128/64 = 64 бит (моделирование инструкции DIV
), но, к моему удивлению, ни Visual C ++, ни Intel C ++, похоже, не имеют его, при по крайней мере, его нет в intrin.h.
Кто-нибудь может это подтвердить? Я попытался найти имена функций в исполняемых файлах компилятора с помощью команды grep, но не смог найти _umul128
в первую очередь, поэтому, думаю, я посмотрел не в том месте.
Обновление: по крайней мере, я нашел шаблон umul128
(без ведущего подчеркивания) в c1.dll Visual C ++ 2010. Все остальные встроенные функции перечислены вокруг него, но, к сожалению, нет "udiv128" или тому подобное :( Так что, похоже, они действительно «забыли» его реализовать.
Чтобы уточнить: я ищу не только 128-битный тип данных, но и способ разделить 128-битное скалярное int на 64-битное int в C ++. Либо встроенная функция , либо собственная 128-битная целочисленная поддержка решит мою проблему.
Изменить: Ответ отрицательный, в Visual Studio 2010 до 2017 года нет встроенного _udiv128
, но он доступен в Visual Studio 2019 RTM