Zastanawiam się, czy tak naprawdę nie ma wewnętrznej funkcji dzielenia 128-bitowego w Visual C++?128-bitowy podział wewnętrzny w Visual C++
Istnieje wewnętrzna funkcja mnożenia 64x64 = 128 bitów o nazwie _umul128(), która ładnie pasuje do instrukcji asemblera MUL x64.
Oczywiście założyłem, że istnieje również podział wewnętrzny 128/64 = 64 bitów (modelowanie instrukcji DIV), ale ku mojemu zdumieniu ani Visual C++, ani Intel C++ nie wydają się mieć tego, przynajmniej nie ma na liście intrin.h.
Czy ktoś może to potwierdzić? Próbowałem grep'ing dla nazw funkcji w plikach wykonywalnych kompilatora, ale nie mogłem znaleźć _umul128 w pierwszej kolejności, więc domyślam się, że patrzyłem w niewłaściwym miejscu.
Aktualizacja: przynajmniej znalazłem wzór "umul128" (bez wiodącego podkreślenia) w pliku c1.dll programu Visual C++ 2010. Wszystkie inne elementy wewnętrzne są wymienione wokół niego, ale niestety nie ma "udiv128" lub podobnych :(Tak wygląda na to, że naprawdę "zapomnieli" go zaimplementować:
Aby wyjaśnić: szukam nie tylko 128-bitowego typu danych, ale sposób na podzielenie 128-bitowego int intela skalarnego przez 64-bitowe int w C++. OSOBĄ wewnętrzna funkcja lub rodzimy 128-bitowego całkowitą rozwiąże mój problem.
Edi T: Odpowiedź brzmi: nie, nie ma _udiv128 wewnętrzna w Visual Studio 2010 lub 2012.
Nie jest częścią CRT. Jest nieodłączny, przychodzi za darmo z procesorem. Ale tylko w trybie 64-bitowym. Żadnego freebiego dla div, dopóki nie otrzymasz 128-bitowego procesora. Biorąc pod uwagę absurdalnie szeroki zakres pow (2, 128), powinieneś szukać dowolnej biblioteki precyzji. Mnóstwo ludzi wokół. –
@TreeMonkie: __int18 nie jest obsługiwany przez VS, zobacz http://stackoverflow.com/questions/6759592/how-to-enable-int128-on-visual-studio – cxxl
@Hans: sorry, nie rozumiem. To po prostu NIE jest samoistne, nawet w trybie 64-bitowym. I potrzebuję go do * zapisu * arbitralnej, precyzyjnej biblioteki :) – cxxl