Aktywne Wpisy
zloty_wkret +87
Dlaczego świadomi mężczyźni wybierają za żony 10-15 lat młodsze od siebie dziewczyny?
Bo prawdopodobieństwo, że taka dziewczyna będzie życiowo "czysta", bez przejść, dziwnych akcji, bez wielu grzechów, karuzeli kutang jest bardzo wysokie. Nie ma nic piękniejszego u kobiety jak czystość, niewinność, szlachetność. Taka dziewczyna nigdy nie straciła kręgosłupa moralnego, nigdy nie zrobiła nic wbrew sobie. Jest jak nierozwinięty, rzadki kwiat, który trzeba pielęgnować, żeby pokazał swoje piękno.
Wam wmówiono, że rozwiązłość, niedbanie
Bo prawdopodobieństwo, że taka dziewczyna będzie życiowo "czysta", bez przejść, dziwnych akcji, bez wielu grzechów, karuzeli kutang jest bardzo wysokie. Nie ma nic piękniejszego u kobiety jak czystość, niewinność, szlachetność. Taka dziewczyna nigdy nie straciła kręgosłupa moralnego, nigdy nie zrobiła nic wbrew sobie. Jest jak nierozwinięty, rzadki kwiat, który trzeba pielęgnować, żeby pokazał swoje piękno.
Wam wmówiono, że rozwiązłość, niedbanie
R_O_T_T_E_N +767
Jakiś czas temu napisałem parę symulacji związanych z Ogólną Teorią Względności w #cpp, a wśród nich prostą symulację opóźnienia Shapiro. Gdy zainteresowałem się #rustlang, postanowiłem spróbować przepisać ten kod właśnie w Ruście. Spodziewałem się uzyskać ładniejszy kod o porównywalnej wydajności, jednak kiedy w końcu napisałem działającą wersję symulacji Shapiro, okazała się kilkadziesiąt razy wolniejsza od wersji w C++. Próbowałem optymalizować kod, ale ni cholery nie potrafiłem się zbliżyć do wydajności wersji C++, więc w końcu się poddałem. To było jakieś 2 lata temu.
Wczoraj, zainspirowany pojawieniem się zdjęcia czarnej dziury, postanowiłem wrócić do tematu. Zaobserwowałem jedną interesującą rzecz, która umknęła mi te 2 lata temu. Otóż symulator Shapiro, żeby uzyskać wynik, symuluje tor fotonu w pobliżu Słońca, rozwiązując pewne równanie różniczkowe krok po kroku metodą Dormanda-Prince'a. To, co zauważyłem, to że symulacja w C++ wykonuje około 2000 kroków, a w Ruście - ponad 2 miliony.
Zacząłem szukać źródła rozbieżności. Wynik symulacji był dobry w obu wersjach, więc algorytm musiał być w miarę poprawny. W końcu znalazłem powód.
Metoda Dormanda-Prince'a ma jedną fajną opcję - dość łatwo w niej oszacować błąd względem ścisłego rozwiązania i na tej podstawie dopasowywać wielkość kroku wykonywanego przez metodę. Okazało się, że w kodzie w Ruście... wpisałem o jedno 0 za dużo we fragmencie szacującym błąd ( ಠಠ) Efekt był taki, że błąd wychodził ogromny, metoda wybierała więc najmniejszy możliwy krok symulacji, żeby go minimalizować, przez co wykonywała dużo więcej kroków, niż powinna. Oto zmiana, która poprawiła błąd.
Po tej poprawce kod w Ruście wykonuje wreszcie tyle samo kroków, co kod w C++, z tymi samymi wynikami. Okazuje się jednak... 6 razy szybszy_ niż kod w C++. Prawdopodobnie duża część tej przewagi wynika z tego, że kod w Ruście próbowałem optymalizować, kiedy sądziłem, że jest wolny, a kod w C++ jest taki jak był zawsze, ale jednak wynik mnie pozytywnie zaskoczył.
Dla zainteresowanych:
- wersja w Ruście
- wersja w C++
#programowanie i trochę #fizyka #symulacje
A fajny głównie dlatego, że jak w C czy C++ masz dużą kontrolę na bardzo niskim poziomie, brak GC itp., a jednocześnie nie da się w nim tak
Propagation finished.
t1 = 498.6700642574116
t2 = -370.70006134326985
dt = 1738.7402341164484
delay = 0.0002341164483823377
co do Rusza, to się nie wypowiadam. ale ciągle słyszę, że pisanie w Ruście to jak pisanie w nowoczesnym C++, więc może po unowocześnieniu tego C++ by się go dogoniło ;)
Idea opóźnienia Shapiro jest taka, że promień światła przelatujący w pobliżu dużej masy (np. Słońca) jest nieco opóźniony przez grawitacyjną dylatację czasu względem promienia, który leciałby przez pustą przestrzeń.
Ten symulator symuluje przebieg promienia, który leci od Ziemi do Wenus i z powrotem (tak faktycznie mierzono to opóźnienie), przelatując przy samej powierzchni Słońca. A robi to symulując dwa osobne fotony - oba startują z powierzchni Słońca, jeden jest
@MamCieNaHita: A to na pewno. Ja nigdy nie wyszedłem poza C++98 czy tam 03, więc to jest jak najbardziej stary C++. Podejrzewam, że dałoby się sporo go ulepszyć - podobnie zresztą pewnie kod w Ruście, który niby
t1
it2
są otrzymane z symulacji lotu fotonów w polu grawitacyjnym Słońca.Przez chwilę poczułem się jak 3 lata temu ( ͡º ͜ʖ͡º)
Jakbyś przeskanowal kod jakimś toolem do statycznej analizy to by rzucil warningi w tych miejscach i zaoszczedzil czasu na szukanie bugow.
https://www.google.com/search?q=code+quality+checker+rust
Wołam plusujących komentarz @passage o robieniu znalezisk: @inquis1t0r @aso824 @Shamson @takbardzotymczasowekonto @Phosphoester @Elmono @filip_k @Suchockey @Guru103
COEFF_ERROR_1
, a taka nazwa niewiele by pomogła w zauważeniu nadmiarowego zera...