Thread View: pl.comp.programming
9 messages
9 total messages
Started by osobli...
Sun, 03 Jan 2021 15:07
Jak działa rotr16 w c?
Author: osobli...
Date: Sun, 03 Jan 2021 15:07
Date: Sun, 03 Jan 2021 15:07
1 lines
1289 bytes
1289 bytes
Jaki będzie rezultat rotr16(15,2). Czy będzie to 1111, czy 110000000000000011?
Re: Jak działa rotr16 w c?
Author: heby
Date: Sun, 03 Jan 2021 15:21
Date: Sun, 03 Jan 2021 15:21
5 lines
1396 bytes
1396 bytes
On 03/01/2021 16:07, osobli...@gmail.com wrote: > 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.
Re: Jak działa rotr16 w c?
Author: osobli...
Date: Sun, 03 Jan 2021 15:34
Date: Sun, 03 Jan 2021 15:34
7 lines
1849 bytes
1849 bytes
niedziela, 3 stycznia 2021 o 16:21:38 UTC+1 heby napisał(a): > On 03/01/2021 16:07, osobli...@gmail.com wrote: > > 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. Czyli binarnie 1100000000000011. Faktycznie pomyliłem się o dwa zera. Dzięki :)
Re: Jak działa rotr16 w c?
Author: Mateusz Viste
Date: Sun, 03 Jan 2021 17:24
Date: Sun, 03 Jan 2021 17:24
11 lines
1206 bytes
1206 bytes
2021-01-03 o 07:07 -0800, osobli...@gmail.com napisał: > 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
Re: Jak działa rotr16 w c?
Author: osobli...
Date: Sun, 03 Jan 2021 21:29
Date: Sun, 03 Jan 2021 21:29
29 lines
2632 bytes
2632 bytes
niedziela, 3 stycznia 2021 o 18:24:30 UTC+1 Mateusz Viste napisał(a):
> 2021-01-03 o 07:07 -0800, osobli...@gmail.com napisał:
> > 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
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
Re: Jak działa rotr16 w c?
Author: Mateusz Viste
Date: Mon, 04 Jan 2021 08:39
Date: Mon, 04 Jan 2021 08:39
35 lines
2208 bytes
2208 bytes
2021-01-03 o 13:29 -0800, osobli...@gmail.com napisał: > niedziela, 3 stycznia 2021 o 18:24:30 UTC+1 Mateusz Viste napisał(a): > > 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 > > To dotyczy tej pracy: > 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. > 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; 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. > Chcę wiedzieć co tam jest robione Zajrzyj głębiej w źródła, by odszukać jak PCG zaimplementował swoje pcg_rotr_64(). Mateusz
Re: Jak działa rotr16 w c?
Author: osobli...
Date: Mon, 04 Jan 2021 12:28
Date: Mon, 04 Jan 2021 12:28
6 lines
1773 bytes
1773 bytes
> > 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.
Re: Jak działa rotr16 w c?
Author: fir
Date: Wed, 06 Jan 2021 12:10
Date: Wed, 06 Jan 2021 12:10
11 lines
2445 bytes
2445 bytes
poniedziałek, 4 stycznia 2021 o 13:28:40 UTC+1 osobli...@gmail.com napisał(a): > > > 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
Re: Jak działa rotr16 w c?
Author: osobli...
Date: Sun, 10 Jan 2021 16:07
Date: Sun, 10 Jan 2021 16:07
29 lines
3188 bytes
3188 bytes
środa, 6 stycznia 2021 o 13:10:02 UTC+1 fir napisał(a):
> poniedziałek, 4 stycznia 2021 o 13:28:40 UTC+1 osobli...@gmail.com napisał(a):
> > > > 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
Faktycznie wciąż pozostawia to pole do pewnych wątpliwości. Znalazłem kod na stronie:
#if PCG_HAS_128BIT_OPS
inline pcg128_t pcg_output_xsl_rr_rr_128_128(pcg128_t state)
{
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;
}
#endif
To jest chyba numpy, a w numpy rotr, to rotacja w prawo.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads