Rzutowanie randa same zera

0
 #include <stdlib.h>
#include <math.h>
#include <time.h>

#define MIN -100
#define MAX 100

typedef FILE* stworz; //wskaznik do pamieci zapisywanego pliku


    int main(int argc,char * argv[]){
	srand(time(0));
	
	stworz text=fopen(argv[1], "w"); //stworzenie pliku
	int n=atoi(argv[2]);	         // ilosx pozycji
		
		
	 if(argc != 3 || n< 0 ||  (text)==NULL ) { // mozliwe beldy
       printf("blad");
      
       exit(1);
    }	
    fprintf(text,"%d\n", n);   
       for(int i = 0 ; i<=n;i++){  //zapelnianie pliku
			
		   double x =(double)(rand() % 11000 - 1000/RAND_MAX);
		   double y=(double)(rand() % 11000 - 1000/RAND_MAX);
		   double z=(double)(rand() % 11000 - 1000/RAND_MAX);
           
           fprintf(text, "%.3lf, %.3lf, %.3lf\n", x, y, z);
           
       }
       
    fclose (text);
 
 

    }

Dlaczego do pilku losuje mi same 0 ? Pozdrawiam

0

Sorry, jeżeli togłupia odpowiedź, bo dawno nie programowałem w języku z rodziny C, ale definiujesz MIN i MAX, ale korzystasz z RAND_MAX, a takiej stałej nigdzie nie ma.

0

To przez niedbalstwo ale to znaczenia nie ma ratujcie mnie ludzie juz 2 h nie potrafie tego naprawic

0

bo rand() zwraca liczbę całktowitą z przedziału 0 - RAND_MAX. Dzielenie całkowitej przez całkowitą zostanie zrzutowane na całkowitą, czyli zaokrąglone w dół do całkowitej. Tu masz ułamek który zawsze zostanie zakrąglony do 0.

double x =((double)(rand() % 11000 - 1000)/RAND_MAX); 
0

Mała zamiana kolejności nawiasów tworzy magię. double x =((double)(rand() % 11000 - 1000))/RAND_MAX;

0

Dalej nie chodzi wie ktoś co jest żle po tej zminie część 0 zostaje część liczb znacznie przkracza ulamki 4 cyfrowe?

0

przykladowy plik zapisany przez program dla argumentu test.txt 7
7
102654584275783228715883819426556958450680066950040175605713839638727921924635002551725157636633829297411392886591222870317076892109066037140850817259516859298639293467614072741197540045276065075544328213171759137469373186845302006999880849192418745385269085804291335048663712914597525653160206564343458867926517633259801210010837051626617997545987171811240867642883425400085966489064302142203091093546647721988675351657224614789390948553382982987898296293091950948003442235166859000888732275632118690734918501029611881873211153434897031575055092235705944809664491610992327279205624805797405484008370912483134615349388546724985551327494206789009341510088351422356568397004910156397172230142080342884441838452984698980347698119755372271204862207242558892621232576091295167956447693670358279372703392797495547009944696738263412342910013683767204373738382362395866085062047045298341875409889186449248622469672651125510544379592973980339589805086095716699082478263505120174829153702254091699514553977046152417805963746673540951250877358120217543367254915012726132182860513819630766009756777674113134716935731763894075527185779699960406931105134400046936210736583158217122779500179872733246266247737726294633603656796147945346019742138110409104901863578131267541284172026602494214472154680313334964123919419752914218122900204336726166217301135654030331857249219428163538481804660769361921608618029316689321187799440355760346717349984358985632062629760327436467602053742811397445624058986201974210406867058204823324674227030989868529076081965798469019168674808084284676855884273069231872355074048.000, -0.000, -10521314362351684076169828663215682355256106592168723173673689950924658643111577726305704190696358934379866912557170675873885713331006822924966881304063655018242539024665248860271187406040793653443606157348328822998448024071820286780406002911140315614675550274658504636824503443695010236055983975154466114254656748291707548352090207603414671441740805759671598484648539527772137935674421863911097450197825740685644688558199863869577325209695574397280506289159890611448421105884936514368306426928278503090813886028911984952960498296313114331063525683087355505445867605248488595011314524292495719845434202369000670317364254187326337509302474617767708072794323712425877064473476220816942414698992419342701479117579451203639940951671796725838026502394535271170265669214432310821874578514691851414814456596684815919177899760868912122049866332907167947484911346247666364171511420437021015097222519113565315127574595672145252798099308190805613587470749559460133944116581118974304088752418271830244879461536945566855292914198871082655495832502789942625072460207301562329312544533841114668196021256737272290707282802571936663465927275859967305156639796751449484862592855806033410816921751079710325338706558686051219720279382799749661729385374636021724882562048961782174462719867285170826211471494454552764855333768727803346160101996648357539684684147587107834182752637714022835105781052636219460481123134223644752976145690670175469372474574817280196256930707977749627289177154071650414696237251539846372396203348806298893830744219943965666088388254592712499058101039146891947988739297150345452471742098233012162424141644113191348007187273805974074168793892402049493679469775424244414849235296157261499731300511225319170184737243312577703260270327845771030274583038551699447369736865521002488399074076091186813390741214950551311493834085536389649887672187110688936478011235303607503273320432902627268690606237771043567631233951608851911671007889365952907639584975056502043918740925515961643727662571039511176579050634271745572244155675109898989235607562426937767461997303771270675671980833658449031222209287252107221529146719457747652762147269789829732059848671080682765012736858144077201634899771675701297377217525670818294037467466669762550367345004776120211056309168744817544807457898249257812984550309538638991634895488651771843761732403022408554337524376597464501410667849107720821664758210653165914178463447029372720496758107747094982119004659502108181604499506244506388900404987498055948310468833042140673923715511271001691753683447801671919829964147794247306482857713892919191711407844426578039341133537261419713459324665418694020562417215024917207876688135213252217298743715148556610913938921183232897410393286702456215179077272804840760766066462106708055439373047545644943359017845153303106966449088589439518420394765869249609501065230043073367742458706364889570074431217278314733423710116817325059964691741976224774407582258433874782078299718247866335471861515187053911941922712678976235100846664844685390049905182599080605340824108208463751208821939421862866955573987423048073351480633631783087587179098051804605625963276959830173431176283731866245258139275954335247992707063907211715919043027648604945322426736190713610959713088872272846969302827216658085144841831947291548883283226453123703881181340359130470041801944489179497326342977596986065087122219750607854163474411174081320166052734003967925521078819141284822767696722642939717084712778109198483559130027380013938526294993714330803687296678100520968194181496139416303424688082888343809740889879562895890997391399985769964824417209964787952478092611971264617376677758361792272214456492963633407090787136311114237376774266358110775422527251336963692086285301079453769148397079836085262068410140759314799429061585123528821221871006283346660752937103844747580955431398835829049308996917882023199548587651438491321373928952153449990970538000859702537993593955581354489037750221380071610704664176701761852807696512228319174818207466572006890734411947517893686225630584140157471736788197481649034821331704847626436597203255807494529688058823916335304638365057283659263540288946889164817466036061519092692159115630241159336453089746196535535918653831703492184670969101162062863763231160644399016681814825992755304532172388809618840977409759198414694127532330699605483650658247560771496663343443885744144105871762506744950966835450960154934243824757427635722418003095438602571164525765110640750958357953630952934843909458929061547669497217046037740055446375443464032941208745015915088870022383793600483381748686547979770774819040500309465311340703841299371518878452111083085651900821145386629101069652563642746507011574356170061626570616605321783117949940894722219846806228702433190587287164066534228233185209429026286999577921498891105999237326535041819989413495383528587794130840302661506769232807275266048.000
-0.000, -4864608265408365554433242667145634221103049258534938771465053719521991126411636461564956473761770269404487960044990720671178201324279770096536665343475101225776186634624379318072865899997065743603616681474828010378456982926799703377731945345448121137164469898188057660702042464466241572941034819138970585393584910669919977779422148714976474188594955257961038101534373944398778269209651032008389795208046033933809409007143459809472195248749725814115351654037227523413848896628404481381546328657342871386025722495488941246065393643605227570603423420058210539819862433877494518924441344850387040576825334661834747506763482202587612601105937569726227733432225318703331997679419113081261579068344158819267528027177938901551867025953192182648605564996517086463447502598936491316998072780610776598418564347118830331357788355860417062510433071023880174045052914901563364046318813079107283428002684972173377503556264296673201060084635013317487338406687094147485875986785954539496165138248893216065746947848207646132867242687115324141586088026569872070297719085594711590127662196382944674876848645614151623377773135472439800285751757814426426831762210113540134698711255379509604905919929977747674017670581868642158210344196195383187756502132958197980671269423524761987035450719532025428415422421495836703695335679368376287070100815294897339202029434224325444114972770834987441272224046490713373445608823379154020367593232696977250063960019261686714274348590471783017511763660220516393807932530731772132480121546959121389168914520381633683951732510651974580802192288089393838498357724928224275515232890270022113836607605046389117870746364034433629263824670664061187443392122138183479332883987240725808224782235163460493240734633955676479233023331215757225283074089769078448388090800313252810109176085425067588683339432641600626538375864194819762953843713498931928173787025280205611462421145912073217388948488837286875067855403217549275977263813723645955029524758389409847298623414644825724757555393392242636282400236633679759276785390329588712810610055643054093536778041589090477437819175948794808376298536902978713000454641836466417429090959218624262584931959492485094641344517017239098339255774748860458353906658737446684671701058388787867477346908774131075678440368528265555075456633206465868293220652380280226666716493583300878417532910877777450652071772581911302111533241110188488468998019550274950452327748400062118341119515886093112335616364987580617142893193875180793572699830643228952316234715230919257647206208282007014499330440875036331025340735848938441275169335413125757680543004225173312684282755815776217073101228607309567860548742258821969777057548343071669600993456878270873606475417555674747351191715745358367728417496413564731925718435870209243596663055836452081011006825936403730663221510524032844565941948443627736412642486733849059858807487953593753368996455403322320129149557097195857403064656386687053508351880816440421262888653572455805569121667575718926976651754307265757491360453408772414494811566374894364887457696213954696422490017380505258934595410697398053354916988077087514122368877237585771771805588152593460131936230349047812407644536135536100587624127828079568974169209490772300409450184522185947329315561799343901414598631230824027786555787717594834665754764149692448252589632633982574291205053735964747144798858331990645958663313653166106204484939375447068691222939832989059806576322519367011326291468782524211176713144022497690875235266741041073373650342742830161041991218522088747988059260116767257809323878949209363139896964267224759359247644383914446219505614470113681663707340438593931783929919048054675957795548438393297694536299936467744611042495305877225854519297496152790520617203517735456897597455601545241221701026190494434543817912902799479778361281570312777495567634496355625028765028381834725465521383336789165377392032121925994649434243063261917244473285708148504600644862608718480003956948846362117206598498547380955255378997537080897956891641457696470448669223257034170708926978565243605768908786621832198593303527525717391825665357510734482747950240420358834700115641197347339646695872097097389077701952474318447214862965824959027347699859425521392411987862993005979353489325769696323132434937561562803728407260331170687395554855660079136180500723214047098752979505292706659104773373952.000, -0.000
-0.000, -60960342717541719922106319034977230543678473789001753528880925877124251939874819447501030974940445167748755718370240483919261157281055180074179654223948638105993478144.000, -0.000
0.000, -104587449664771828801892430564522442337614613467422424513438413491507710445912405680543302121051087705392727409362213610312377353110552002498739746987765774929223438822300951717632099246222436811593416179621020053605982870504964658807563926857583870164411456894701500278732920555105971018046439534984054707637230758902224902647844726531680513660231092224510173437678250275641738197301251467603148340103405400440541359444740695008408546099399886726427943242700918016349289463680409425701764857083043961496538681339097292306084089708449496993462315388375167998400895980396214245619847992649482034567615093988548751929254351977764427505940113953338309877541344553339193548077208415292651769302176309487894000754076230527787673013293185633334021845904165092540924497604928247917106598763577911954101587797774688720520787646322493195118251351767746108997936474231326356908427800564086021932809710002103419265495454766534084714351141117195437354280667260995236729268513890341437908193995774887905433809764986718915787295438953534251444876758720165944519741414971150359258921095758834440587020599296.000, -0.000
-0.000, 0.000, -0.000
0.000, 0.000, -0.000
0.000, 0.000, -0.000
-0.000, -0.000, -0.000

0

Właściwy sposób losowania liczb z podanego zakresu wygląda następująco:

double result = (((double) rand()) / ((double) RAND_MAX)) * WIDTH + SHIFT 

Część w pierwszym nawiasie zwróci nam liczby z zakresu [0.0; 1.0] (włącznie z początkiem i końcem przedziału). Następnie mnożymy ten przedział przez rządaną szerokość przedziału (dla przedziału [0.0; 30.0] WIDTH = 30) oraz dodajemy przesunięcie przedziału (dla przedziału [-10.0; 20.0] WIDTH = 30, SHIFT = -10).

Jako zadanie dla autora wątku pozostawiam pobawienie się powyższym wzorem, aby przedziały były domknięte lub nie.

0
Hfaua napisał(a):

Właściwy sposób losowania liczb z podanego zakresu wygląda następująco:

double result = (((double) rand()) / ((double) RAND_MAX)) * WIDTH + SHIFT 

Część w pierwszym nawiasie zwróci nam liczby z zakresu [0.0; 1.0] (włącznie z początkiem i końcem przedziału). Następnie mnożymy ten przedział przez rządaną szerokość przedziału (dla przedziału [0.0; 30.0] WIDTH = 30) oraz dodajemy przesunięcie przedziału (dla przedziału [-10.0; 20.0] WIDTH = 30, SHIFT = -10).

Jako zadanie dla autora wątku pozostawiam pobawienie się powyższym wzorem, aby przedziały były domknięte lub nie.

kod

 #include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define WIDTH -100
#define SHIFT 100

typedef FILE* stworz; //wskaznik do pamieci zapisywanego pliku


    int main(int argc,char * argv[]){
	srand(time(NULL));
double x, y, z;
 x = 0.0;
 y = 0.0;
 z = 0.0;
	
	stworz text=fopen(argv[1], "w"); //stworzenie pliku
	int n=atoi(argv[2]);	         // ilosx pozycji
		
		
	 if(argc != 3 || n< 0 ||  (text)==NULL ) { // mozliwe beldy
       printf("blad");
      
       exit(1);
    }	
    fprintf(text,"%d\n", n); 
	
	  
       for(int i = 0 ; i<=n;i++){  //zapelnianie pliku
			
 x = (((double) rand()) / ((double) RAND_MAX)) * WIDTH + SHIFT ;
 y = (((double) rand()) / ((double) RAND_MAX)) * WIDTH + SHIFT ;
 z = (((double) rand()) / ((double) RAND_MAX)) * WIDTH + SHIFT ;
           
           fprintf(text, "%3.lf, %3.lf, %3.lf \n", x, y, z);
           
       }
       
    fclose (text);
 
 
return 0;
    }

wynik
5
-0, -0, -0
0, -86376989666919185776545571521880307165302761301153183899867685542458184781886344062043583825396910423455063965833072351257579360352149151530010031887874872801077083698305499938282340495829627117302714477420499702967403277988762795469130206862882544508780993316702319900623960080214649860835842436867951591770278186494864384099876098763537098515084540477645284938721409804332732412290728371808366227544533340490833185924302078774663391300383423012927271599350543431718521032566311610337923462394141817269470749883245659689866514217708817218676869474229601714941923203447914278089869517236115881731911286534062992394798033431050476672286506148534297346027476221244094726048563326706144072892622434734455764018366526121699164248139452875527599781947889841404458000071701889212126328734167296658180039887062356052184777696460611455777772808177706031321547000662687560694251926251150140421297747888167619195224726840476313672645540511106663762680549280895090896527322106037463663978618400357784871304826457669557445953169053132167210619957980299446242380491285381954178396691461728585706931809839447290018291089049414881376160901779047492743586576909638674432368705854341140283574464530799762639732427784275207792680377091045111436774775116841767108641979572862136860199804592005887021984025033737585573240368356989050955866964541072110724867458605979402012148005143514850400031587777623594798116685087226013581872914508286452279464096567475973230574919662894324079690630657696910124150435858959148495264547155182253697728709560206872209583182312978517633730363347965610710038687670115918424261171294121534649272551977513849996652246088426453887771540639335002214673344760867859697761071919982386168820011010006517090673555163293799168959263902310171798302530327314445021167194692511222088042310754831324211406093155919777172800570639396022237910114427517640191518071552496576452101683427144783947820310913508567462337436731623386499091723866961502114547893654963984244863582101967546991852889328589337595326136059352332207852105294673668019617261864150763152450598973650605873299951798640927184523745827842222060235477353504389318524003603945441022277472122669068562734642165696901466931358433371241052809812800029237937049019027478919836310434384991867909024627859902469406427280596095484962514304930401255897043769699023334193662566219026398097861115695150863029453516017817534492732584178028572509143634457633173144825571969353711340318294893641514267936265846912275469389778988118998096114860446720699158260195735245189902877677563544148651337143494407160779689439548887992821714777740381151631291742222172656372003752430901174246852348839956903464335026638337948198443265269981229906566807798868373719702136099086555064877000135643872400013921487572890453276434253640493553452940613315862597311136595622340764883456084370210015784750512348147159210503185377156089028409572858047000177771557827979358635317351684137221691266843830523244756773379127483263250231064474485667246833322605793460329441302599444250663395481128287337945876557157031670826365013192365697580115167617141519872551866617654886313063679385752715948556177503430672265059748681903975533233995197516929924137597668680843356290925582404339052849351401519437935678000205507096980133374883211853357575915006907218213837342578168310563934183448519302247044771893171818600963288863531245664646975049738706061199769504272150680603951127562151409809295306526483581466302299290054059438552603556988548764813836833335984079173408937303210132284764240736256006032664097504662578378895353640967916152289992616981896326813641236346641279630028781548762988139498517488616768664037541870870480564940795649215190590230758864703192498301257963590160433334108263929545796127885627278804479403227337938378635811631713409298373230174858466346442205556736989569931639838867247250211010251290449246655668511207024577819026851818702158473079791090155909776174566604482708481335845583281460680000040131175797794119005425662298959483209673091077221802218162148939523067936085410846240345880642960400161034661928417265921725764152205813449165311233554987309998779076250192211101830091161474670976534150521183968214084572440554069579241278946217517573648892509763541762912167636686038191399505825527644528873238318707585422071604320033132369088473761588301739216418145524516672155843000210029939135100158432449040684455716040390206383436210795621734750943957994758314444117886862917586009387389285607523594845706694743027811649264362142475486983265531862057805995500887867392, -0
0, 0, -0
-0, -87719311684146918431585101075450816540491219490647439510552871588723875529287143617089546360916859758351805538273293413664114306097360206573167574561765318935047270277628785449616652123824726203243784732146355418813899375536127134359403733755661866469830528409586885339546621504790979200476052878922159990587073876724635179273591281813548164269890107101855733705710014689025597913159035166122326383338199506545260610228910873883062357079261369153581698849231937560969854583742673263043967506646812401331142700319210503606146240775525314580847116905341567157280329475581844073756022042570639537403418731088039728244141090547390866604381325179884939932373378875570692799396974881624719718485298220188221688302941398380404138780540788897185835526586049343610892332535482218633125730972887324666811346767862204448523606976026157139815139543653106655962492890381564916391667311820572332622793686067526218541480004935239903454257218077858026056446039034877725782223545319544366649864532785792553944147012436166612107710724637673333984815995415282686048029442166210281384627036447017420468509867787798756077113804719941919190423749580303561282427606681469050970318420107666602121409273087400513782363284925774030742216193059440625125330155108040704, -0
-0, -0, -0
-0, 0, -0

0
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define WIDTH -100
#define SHIFT 100
 
typedef FILE* stworz; //wskaznik do pamieci zapisywanego pliku
 
 
    int main(int argc,char * argv[]){
        srand(time(NULL));
double x, y, z;
 x = 0.0;
 y = 0.0;
 z = 0.0;
 
        stworz text=fopen(argv[1], "w"); //stworzenie pliku
        int n=atoi(argv[2]);                 // ilosx pozycji
 
 
         if(argc != 3 || n< 0 ||  (text)==NULL ) { // mozliwe beldy
       printf("blad");
 
       exit(1);
    }        
    fprintf(text,"%d\n", n); 
 
 
       for(int i = 0 ; i<=n;i++){  //zapelnianie pliku
 
	 x = ((double)( rand()  % 11000 - 1000) /  RAND_MAX) ;
	 y = ((double)( rand() % 11000 - 1000) / RAND_MAX) ;
	 z = ((double)(rand() % 11000 - 1000) /  RAND_MAX)  ;
 
           fprintf(text, "%.3f, %.3f, %.3f \n", x, y, z);
 
       }
 
    fclose (text);
 
 
return 0;
    }
 
0

Dzeiki wreszcie dziala nie wpadlbym an to. N a czym polega roznica powiedzy %lf a %f? Bo nie mgoe tego nigdzie znaleŹĆ ?

0

%lf to Long Float, czyli double, a %f to float.

0

Dla double i dla float, z racji automatycznej promocji (float->double), format jest ten sam - %f. Dla long double jest %Lf. Czy %lf jest w ogóle dozwolone? Zdaje się, że l zostanie po prostu zignorowane...

1 użytkowników online, w tym zalogowanych: 0, gości: 1