Nejlepší odpověď
Čísla s plovoucí desetinnou čárkou nejsou přesně ukládána do paměti počítače. Je to proto, že jakékoli číslo s plovoucí desetinnou čárkou je aproximováno nejbližší binární reprezentaci. Předpokládejme tedy, že ano,
float a=0.87;
float b=0.87;
if(a==b){
printf("Equal \n");
} else {
printf("Not equal \n");
}
Šance jsou, Vytiskne se „Nerovná se.“ Takže nyní máme otázku. Jak zkontrolujeme rovnost 2 čísel s plovoucí desetinnou čárkou?
Zde je místo, kde se do obrázku dostane 1e-12. Rozdíl méně než 1e-12 mezi 2 čísly s plovoucí desetinnou čárkou je považováno za dostatečně nízké, aby se mohly rovnat. Proto ve 2. makru kontroluje, zda je absolutní hodnota a, menší než 1e-12. Program může vypadat takto:
float a=0.87;
float b=0.87;
if(zero(a-b)){
printf("Equal \n");
} else {
printf("Not qqual \n");
}
Je zaručeno, že bude vytištěno „Rovné“.
Doufám, že pomáhá.
Odpověď
No, pokud se o něj vůbec nestará – dokonce natolik, aby o tom mohl diskutovat – váš úkol je nemožný.
Pokud je ochoten mluvit, ale není ochoten se o kódu dívat nebo se o něm dozvědět, zkuste s ním hrát tuto hru: jste robot bez autonomie. Jeho úkolem je přimět vás vstát z pohovky, jít do kuchyně a připravit čtyři arašídové máslo a želé sendviče. Bude to muset udělat tak, že vám dá anglické příkazy.
Rozumíte akcím jako „chodit“ a „dostat nůž ze zásuvky“, takže vám nemusí říkat, jak hýbat každým svalem, a rozumíte tomu, jaké objekty jsou, takže nemusí muset definovat „nůž“. Ale to je hranice vašeho porozumění.
Dbejte na to, abyste jeho pokyny plnili doslovně a přiměli ho začít znovu, pokaždé, když výsledkem nebudou čtyři sendviče PB&J.
„Postavte se a jděte do kuchyně“
Postavte se a jděte ke zdi oddělující kuchyň a obývací pokoj .
„Arg! Myslím tím vstát a jít ke vstupní cestě do kuchyně.“
Učiníte tak.
„Vyjměte chléb ze skříně“
Drápáte na dveře skříně a nemůžete z nich vyjmout chléb.
„Otevřete dveře!“
Otevřete dvířka trouby.
„Myslím tím dvířka skříně!“
Učiníte tak.
„Získejte chleba.“
Vyrazíte chléb ze skříňky na kuchyňskou podlahu …