Soru:
Random () / randomSeed () fonksiyonunun formülü / hesaplanması
kimliv
2014-05-09 20:23:23 UTC
view on stackexchange narkive permalink

random () ile çağrılan hesaplamayı hangi dosyada bulabilirim? Çok fazla değilse, cevabınızda içeriği de gönderebilir misiniz? Bir Arduino Uno ve onun standart IDE'sini kullanıyorum.

Bunu "WMath.cpp" içinde buldum, ancak bu son hesaplama değil.

  void randomSeed (işaretsiz int tohum) {if (seed! = 0) {srandom (seed); }} uzun rasgele (uzun howbig) {if (howbig == 0) {return 0; } return random ()% howbig;} uzun rastgele (uzun howsmall, uzun howbig) {if (howsmall > = howbig) {return howsmall; } uzun fark = howbig - howsmall; rastgele döndür (fark) + howsmall;}  
Iki yanıtlar:
Peter Bloomfield
2014-05-09 22:23:42 UTC
view on stackexchange narkive permalink

Altta yatan random () işlevi Arduino kodunun bir parçası değildir. Aslında avr-libc 'nin bir parçasıdır. Arduino IDE yalnızca önceden derlenmiş nesne koduyla birlikte gelir (bildiğim kadarıyla).

Yine de açık kaynak. Bununla ilgili bilgiye buradan ulaşabilirsiniz:

If sayfaya kısa bir şekilde baktığınızda "Kaynak kodu ve dokümantasyon" bağlantısını bulacaksınız.

random () işlevi libc / stdlib / altında random.c . Kaynak kodunu buraya yapıştırırdım, ancak teknik olarak bütün bir telif hakkı uyarısını ona eklemem gerekir.

Bu 76 satırlık telif hakkı, öyleyse neden göndermiyorsunuz?
@kimliv - Dürüst olmak gerekirse, başka birinin kütüphane kodunun önemli bir parçasını izinleri olmadan yayınlamak nezaketsizlik duyarım.
Ancak telif hakkı söz konusu olduğunda, kütüphanenin yazarı sanırım algoritmanın mucidi değildi. (Benim için asıl iş nedir)
Gabriel Staples
2017-01-09 03:26:09 UTC
view on stackexchange narkive permalink

Peter Bloomfield'ın yanıtını buradan okuyun: https://arduino.stackexchange.com/a/1482/7727

Ardından aşağıdakileri okuyun:

Herkesin referansı için Arduino'nun WMath.cpp'si burada bulunur.

AVR-Libc'in random () işlevi için belgeler burada.

Burada bağlantılı olarak burada AVR-Libc için kaynak kodu bulunur.

"avr-libc-2.0.0'ı indirdim .tar.bz2.sig 08-Şub-2016 "yazıp çıkardı. Peter'ın dediği gibi, "rasgele" nin kaynak kodu " avr-libc-2.0.0 \ libc \ stdlib \ random.c " içindedir

Sizi güçlükten kurtarmak için, işte, telif hakkı ve lisans beyanıyla birlikte kaynak kodu hemen üstünde.

  / * - * Telif Hakkı (c) 1990, 1993 * The Regents of the University of California. Her hakkı saklıdır. * * Değiştirilerek veya değiştirilmeden kaynak ve ikili biçimlerde yeniden dağıtıma ve kullanıma, aşağıdaki koşulların * karşılanması koşuluyla izin verilir: * 1. Kaynak kodun yeniden dağıtımlarında yukarıdaki telif hakkı * uyarısı, bu koşullar listesi ve aşağıdakiler korunmalıdır sorumluluk reddi. * 2. İkili biçimdeki yeniden dağıtımlar, yukarıdaki telif hakkı * bildirimini, bu koşullar listesini ve aşağıdaki sorumluluk reddini * belgelerde ve / veya dağıtımla birlikte sağlanan diğer malzemelerde yeniden oluşturmalıdır. * 3. Ne Üniversitenin adı ne de katkıda bulunanların adları * önceden özel yazılı izin alınmadan bu yazılımdan * türetilen ürünleri onaylamak veya tanıtmak için kullanılamaz. * * BU YAZILIM REGENTS VE KATKIDA BULUNANLAR TARAFINDAN `` OLDUĞU GİBİ '' SAĞLANMAKTADIR VE * TİCARİ ELVERİŞLİLİK VE BELİRLİ BİR AMACA UYGUNLUK * DAHİL ANCAK BUNLARLA SINIRLI OLMAMAK ÜZERE HERHANGİ AÇIK VEYA ZIMNİ GARANTİLER REDDEDİLMEKTEDİR. HİÇBİR DURUMDA REFERANSLAR VEYA KATKI SAĞLAYICILAR, HERHANGİ BİR DOĞRUDAN, DOLAYLI, ARIZİ, ÖZEL, ÖRNEK VEYA DOLAYLI * HASARLARDAN (SINIRLI OLMAYAN YEDEK MALLARIN TEMİNİ DAHİL)
* VEYA HİZMETLER; KULLANIM, VERİ VEYA KAR KAYBI; VEYA İŞ KESİNTİSİ) * HERHANGİ BİR ŞEKİLDE BU YAZILIMIN KULLANILMASINDAN BİLE, MÜMKÜN OLSA BİLE, SÖZLEŞME, SÖZLEŞME, KISITLIK * SORUMLULUK VEYA TORT (İHMAL VEYA BAŞKA BİR ŞEKİL DAHİL) * BÖYLE HASAR. * * Posix rand_r işlevi Mayıs 1999 Wes Peters <wes@softweyr.com> tarafından eklendi. * * $ Id: random.c 1944 2009-04-01 23: 12: 20Z arcanum $ * // * * Gönderen: statik karakter sccsid [] = "@ (#) rand.c 8.1 (Berkeley) 6/14 / 93 "; * / # include <stdlib.h> # include" bölümadı.h "ATTRIBUTE_CLIB_SECTIONstatic longdo_random (unsigned long * ctx) {/ * * Compute x = (7 ^ 5 * x) mod (2 ^ 31 - 1) * overflow olmadan 31 bit: * (2 ^ 31 - 1) = 127773 * (7 ^ 5) + 2836 * "Rastgele sayı üreteçleri: iyi olanları bulmak zordur", * Park ve Miller, Communications of the ACM, cilt. 31, hayır. 10, * Ekim 1988, s. 1195. * / long hi, lo, x; x = * ctx; / * 0 ile başlatılamaz, bu yüzden başka bir değer kullanın. * / eğer (x == 0) x = 123459876L; hi = x / 127773L; lo = x% 127773L; x = 16807L * lo - 2836L * merhaba; eğer (x < 0) x + = 0x7fffffffL; return ((* ctx = x)% ((unsigned long) RANDOM_MAX + 1));} ATTRIBUTE_CLIB_SECTIONlongrandom_r (unsigned long * ctx) {return do_random (ctx);} static unsigned long next = 1; ATTRIBUTE_CLIB_SECTIONlong_random (&next);} ATTRIBUTE_CLIB_SECTIONvoidsrandom (işaretsiz uzun tohum) {sonraki = tohum;}  


Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...