Discussion:
Jak działa rotr16 w c?
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
osobli...@gmail.com
2021-01-03 15:07:13 UTC
Permalink
Jaki będzie rezultat rotr16(15,2). Czy będzie to 1111, czy 110000000000000011?
heby
2021-01-03 15:21:36 UTC
Permalink
Post by ***@gmail.com
Jaki będzie rezultat rotr16(15,2). Czy będzie to 1111, czy 110000000000000011?
Ani jeden ani drugi (bo ma z dużo bitów). Outputem będzie liczbna 16
bit, typu unsigned short. Konkretnie: 0xc003.
osobli...@gmail.com
2021-01-03 15:34:03 UTC
Permalink
Ten wpis może być nieodpowiedni. Kliknij, aby go wyświetlić.
Mateusz Viste
2021-01-03 17:24:23 UTC
Permalink
Post by ***@gmail.com
Jaki będzie rezultat rotr16(15,2). Czy będzie to 1111, czy
110000000000000011?
rotr16() to nie C.

Jeśli pytanie dotyczy specyficznego Microsoftowego rozszerzenia, to
dokumentacja jest tutaj:
https://docs.microsoft.com/en-us/cpp/intrinsics/rotr8-rotr16?view=msvc-160

Mateusz
osobli...@gmail.com
2021-01-03 21:29:30 UTC
Permalink
Post by Mateusz Viste
Post by ***@gmail.com
Jaki będzie rezultat rotr16(15,2). Czy będzie to 1111, czy
110000000000000011?
rotr16() to nie C.
Jeśli pytanie dotyczy specyficznego Microsoftowego rozszerzenia, to
https://docs.microsoft.com/en-us/cpp/intrinsics/rotr8-rotr16?view=msvc-160
Mateusz
To dotyczy tej pracy:

https://www.pcg-random.org/pdf/hmc-cs-2014-0905.pdf

Tam są używane rotate64. Kod jednego z generatorów, który mnie interesuje wygląda tak:

uint32_t rot1 = (uint32_t)(state >> 122u);
uint64_t high = (uint64_t)(state >> 64u);
uint64_t low = (uint64_t)state;
uint64_t xored = high ^ low;
uint64_t newlow = pcg_rotr_64(xored, rot1);
uint64_t newhigh = pcg_rotr_64(high, newlow & 63u);
return (((pcg128_t)newhigh) << 64u) | newlow;

Chcę wiedzieć co tam jest robione, żeby napisać taki rotate poprawnie w Pythonie. Ten sam generator XSL-RR-RR jest też wymieniony tutaj:

https://en.wikipedia.org/wiki/Permuted_congruential_generator
Mateusz Viste
2021-01-04 08:39:13 UTC
Permalink
Post by ***@gmail.com
Post by Mateusz Viste
rotr16() to nie C.
Jeśli pytanie dotyczy specyficznego Microsoftowego rozszerzenia, to
https://docs.microsoft.com/en-us/cpp/intrinsics/rotr8-rotr16?view=msvc-160
https://www.pcg-random.org/pdf/hmc-cs-2014-0905.pdf
Tak, wiem. Ja tylko wskazuję na błędnie zadane pytanie: "Jak działa
rotr16 w c". Otóż nie działa, bo nie ma czegoś takiego w C.
Post by ***@gmail.com
uint32_t rot1 = (uint32_t)(state >> 122u);
uint64_t high = (uint64_t)(state >> 64u);
uint64_t low = (uint64_t)state;
uint64_t xored = high ^ low;
uint64_t newlow = pcg_rotr_64(xored, rot1);
uint64_t newhigh = pcg_rotr_64(high, newlow & 63u);
return (((pcg128_t)newhigh) << 64u) | newlow;
Powyższy kod odwołuje się do funkcji pcg_rotr_64(). Sądząc po nazwie,
to jest funkcja wchodząca w skład samego projektu.
Post by ***@gmail.com
Chcę wiedzieć co tam jest robione
Zajrzyj głębiej w źródła, by odszukać jak PCG zaimplementował swoje
pcg_rotr_64().


Mateusz
osobli...@gmail.com
2021-01-04 12:28:39 UTC
Permalink
Post by Mateusz Viste
Post by ***@gmail.com
Chcę wiedzieć co tam jest robione
Zajrzyj głębiej w źródła, by odszukać jak PCG zaimplementował swoje
pcg_rotr_64().
Chyba jest już jasne. Autor w swojej publikacji pisze: rotate64(v,r) denotes an unsigned 64-bit bitwise clockwise rotation
of r bits on v (i.e., v clockwise r ). Czyli na pewno jest to na bitach, a nie na bajtach.
fir
2021-01-06 12:10:00 UTC
Permalink
Post by ***@gmail.com
Post by Mateusz Viste
Post by ***@gmail.com
Chcę wiedzieć co tam jest robione
Zajrzyj głębiej w źródła, by odszukać jak PCG zaimplementował swoje
pcg_rotr_64().
Chyba jest już jasne. Autor w swojej publikacji pisze: rotate64(v,r) denotes an unsigned 64-bit bitwise clockwise rotation
of r bits on v (i.e., v clockwise r ). Czyli na pewno jest to na bitach, a nie na bajtach.
lol, wiadomoz ze na bitach ale pytanie jest co ludzie rozumieja przez clockwize skoro bity w powszechnym pojeciu nie tworzą chyab zbyt okreslonego kolka...kiedys mowilo sie nie clockwize tylko w prawo

- zeby takie prawo robilo clockwise to nawiasem mowiac bity musialybybyc numerowane antyclockwise bo ta operacja to przesuwanie w tyl

przyznam ze sam z tymi konwencjami mam pewne poroblemy bo niekoniecznie te rozne konwencje orientacyjne sa chyba zawsze dobre w okreslonej sytuacji i jest tu do wyboru chyba sporo opcji do wyboru
osobli...@gmail.com
2021-01-10 16:07:13 UTC
Permalink
Ten wpis może być nieodpowiedni. Kliknij, aby go wyświetlić.
Kontynuuj czytanie narkive:
Loading...