🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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?
#217314
Author: osobli...
Date: Sun, 03 Jan 2021 15:07
1 lines
1289 bytes
Jaki będzie rezultat rotr16(15,2). Czy będzie to 1111, czy 110000000000000011?
Re: Jak działa rotr16 w c?
#217315
Author: heby
Date: Sun, 03 Jan 2021 15:21
5 lines
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?
#217316
Author: osobli...
Date: Sun, 03 Jan 2021 15:34
7 lines
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?
#217317
Author: Mateusz Viste
Date: Sun, 03 Jan 2021 17:24
11 lines
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?
#217318
Author: osobli...
Date: Sun, 03 Jan 2021 21:29
29 lines
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?
#217319
Author: Mateusz Viste
Date: Mon, 04 Jan 2021 08:39
35 lines
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?
#217320
Author: osobli...
Date: Mon, 04 Jan 2021 12:28
6 lines
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?
#217321
Author: fir
Date: Wed, 06 Jan 2021 12:10
11 lines
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?
#217322
Author: osobli...
Date: Sun, 10 Jan 2021 16:07
29 lines
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