Hej tamo! Kao dobavljaču prekidača, često mi se postavljaju neka tehnička pitanja o prekidačima, a jedno koje se često pojavljuje je da li se naredba switch može koristiti sa brojevima u pokretnom zarezu u C++. Zadubimo se u ovu temu i saznajmo odgovor.


Prvo, hajde da brzo ponovimo šta je naredba switch u C++. Naredba switch je izjava toka kontrole koja omogućava da se varijabla testira na jednakost u odnosu na listu vrijednosti. Svaka vrijednost se naziva slučaj, a naredba switch skače na slučaj koji odgovara vrijednosti varijable. To je zgodan način da se pojednostavi niz if - else izjava kada imate više uslova za provjeru.
int broj = 2; switch(num) { case 1: std::cout << "Broj je 1." << std::endl; break; slučaj 2: std::cout << "Broj je 2." << std::endl; break; default: std::cout << "Broj nije ni 1 ni 2." << std::endl; }
U gornjem primjeru, naredba switch provjerava vrijednost cjelobrojne varijableu a. Akou aje 1, ispisuje "Broj je 1." Ako je 2, ispisuje "Broj je 2." A ako nije ni jedno ni drugo, ide nadefaultslučaj.
Sada, hajde da pričamo o brojevima u pokretnom zarezu. Brojevi s pomičnim zarezom se koriste za predstavljanje realnih brojeva s razlomkom, kao što je 3,14 ili 2,718. Pohranjuju se u memoriju koristeći određeni format koji može dovesti do nekih problema s preciznošću.
Dakle, možemo li koristiti naredbu switch sa brojevima u pokretnom zarezu u C++? Kratak odgovor je ne. C++ standard eksplicitno navodi da izraz u naredbi switch mora imati integralni ili tip nabrajanja. Tipovi s pomičnim zarezom, kao što sufloatiduplo, nisu dozvoljeni.
Razlog za ovo ograničenje je uglavnom zbog problema preciznosti brojeva s pomičnim zarezom. Brojevi s plutajućim zarezom su predstavljeni binarno, a ne mogu se svi decimalni brojevi tačno predstaviti binarno. Na primjer, decimalni broj 0,1 ne može se točno predstaviti kao binarni broj s pomičnim zarezom. To znači da kada uporedite dva broja s pomičnim zarezom za jednakost, može postojati mala razlika zbog preciznosti reprezentacije.
float a = 0,1; float b = 0,1; if(a == b) { std::cout << "Oni su jednaki." << std::endl; } else { std::cout << "Nisu jednaki." << std::endl; }
u teoriji,aibtrebalo bi da budu jednake, ali zbog problema sa preciznošću može postojati mala razlika između njih i poređenje možda neće raditi kako se očekivalo. Budući da se naredba switch oslanja na tačna poređenja jednakosti, korištenje brojeva s pomičnim zarezom dovelo bi do nepredvidivog ponašanja.
Ali ne brini! Još uvijek postoje načini za postizanje slične funkcionalnosti ako trebate rukovati različitim slučajevima na osnovu vrijednosti s pomičnim zarezom. Jedan uobičajeni pristup je korištenje niza if – else iskaza s odgovarajućom tolerancijom za poređenja s pomičnim zarezom.
float vrijednost = 3,14; if(vrijednost >= 3.0 && vrijednost < 3.2) { std::cout << "Vrijednost je u rasponu [3.0, 3.2)." << std::endl; } else if(vrijednost >= 3.2 && vrijednost < 3.4) { std::cout << "Vrijednost je u rasponu [3.2, 3.4)." << std::endl; } else { std::cout << "Vrijednost je izvan definiranih raspona." << std::endl; }
U ovom primjeru koristimo if - else naredbe da provjerimo je li vrijednost plutajućeg zarezavrijednostspada u određene opsege. Na ovaj način možemo rukovati različitim slučajevima na osnovu vrijednosti broja s pomičnim zarezom bez oslanjanja na tačna poređenja jednakosti.
Kao dobavljač prekidača, znam da različite aplikacije zahtijevaju različite vrste prekidača. Jedan tip prekidača koji se široko koristi u mnogim industrijama jeElektronski prekidač pritiska. Elektronski prekidači pritiska se koriste za praćenje i kontrolu pritiska u različitim sistemima. Mogu se programirati da pokrenu akciju kada pritisak dostigne određeni nivo, što je vrlo korisno u aplikacijama kao što su industrijska automatizacija, HVAC sistemi i hidraulički sistemi.
Ako ste na tržištu za visokokvalitetne prekidače, bilo da se radi o C++ projektu programiranja koji uključuje kontrolu fizičkih uređaja ili za druge industrijske aplikacije, mi ćemo vas pokriti. Naša kompanija nudi širok spektar prekidača, uključujući elektronske presostatke, sa različitim specifikacijama i karakteristikama kako bi zadovoljili vaše specifične potrebe.
Ako ste zainteresirani da saznate više o našim proizvodima ili želite detaljno razgovarati o svojim zahtjevima, ne ustručavajte se kontaktirati. Tu smo da vam pomognemo da pronađete savršeno rešenje prekidača za vaš projekat. Bilo da ste hobi koji radi na malom projektu ili veliki industrijski proizvođač, možemo vam pružiti prekidače koji su vam potrebni po konkurentnoj cijeni.
U zaključku, iako ne možete koristiti naredbu switch sa brojevima u pokretnom zarezu u C++, postoje alternativni načini za rukovanje različitim slučajevima zasnovanim na vrijednostima u pokretnom zarezu. A ako tražite pouzdane prekidače, mi smo dobavljač kojem možete vjerovati. Stoga, stupite u kontakt s nama danas i započnimo odlično partnerstvo!
Reference
- Dokumentacija standardne biblioteke C++
- "Programski jezik C++" Bjarnea Stroustrupa
