Hvad er brugen af ​​1e-12 i konkurrenceprogrammering?


Bedste svar

Flydende numre lagres ikke nøjagtigt i computerens hukommelse. Dette skyldes, at ethvert flydende nummer tilnærmes til den nærmeste binære repræsentation. Lad os derfor antage, at vi har

float a=0.87;

float b=0.87;

if(a==b){

printf("Equal \n");

} else {

printf("Not equal \n");

}

Chancer er, “Ikke ens” vil blive udskrevet. Så nu har vi et spørgsmål. Hvordan kontrollerer vi ligestillingen mellem 2 flydende punktum?

Her er hvor 1e-12 kommer ind i billedet. En forskel på mindre end 1e-12 mellem 2 flydende tal betragtes som lave nok til, at de er ens. Derfor kontrollerer den i den anden makro, om den absolutte værdi af a, er mindre end 1e-12. Programmet kan se sådan ud:

float a=0.87;

float b=0.87;

if(zero(a-b)){

printf("Equal \n");

} else {

printf("Not qqual \n");

}

Dette er garanteret at udskrive “Lig”.

Det håber jeg hjælper.

Svar

Nå, hvis han slet ikke er ligeglad – endda nok til at diskutere det – er din opgave umulig.

Hvis han er villig til at tale, men ikke villig til at se på eller lære om kode, så prøv at spille dette spil med ham: du er en robot uden autonomi. Hans job er at få dig til at rejse dig fra sofaen, gå i køkkenet og lave fire jordnøddesmør og gelésmørbrød. Han bliver nødt til at gøre dette ved at give dig engelske kommandoer.

Du forstår handlinger som “gå til” og “få kniv fra skuffen”, så han behøver ikke fortælle dig, hvordan du bevæger hver muskel, og du forstår, hvad genstande er, så han ikke er nødt til at definere “kniv”. Men det er grænsen for din forståelse.

Sørg for at udføre hans instruktioner bogstaveligt og få ham til at starte forfra, hver gang resultatet ikke er fire PB&J sandwich.

“Stå op og gå til køkkenet”

Du står op og går til væggen, der adskiller køkkenet og stuen .

“Arg! Jeg mener at stå op og gå til indgangsvejen til køkkenet.”

Du gør det.

“Fjern brødet fra skabet”

Du klør ved skabsdøren og kan ikke trække brød ud af det.

“Åbn døren!”

Du åbner ovnlågen.

“Jeg mener åben skabsdøren!”

Du gør det.

“Få brødet ud.”

Du banker brødet ud af skabet og på køkkengulvet …

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *