Zdravíčko mám otázku existuje nějaká funkce u které napíšu toleranci výpočtu třeba 100 +- 0,2. Výsledek 100,012 a vyhodnotí jí jako true ? Nebo to musím složitě sám napsat přes if ? Děkuji za odpověď
Fórum › C / C++
C++ Tolerance float
:) musíš si to udělat sám ... jako všechno v životě :) .. chápeš jo ? ruční pohon :)
možná by sis měl o IEEE754 normě něco přečíst než začneš ... abys pak nebyl zklamán
http://yosefk.com/blog/consistency-how-to-defeat-the-purpose-of-ieee-floating-point.html
https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/
https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
http://www.softwareandfinance.com/CPP/FAQ_Floating_Point.html
Složitě? Pokud má vracet true/false, stačilo by to jako výraz: je větší rovno než hodnota - tolerance a menší nebo rovno než hodnota + tolerance. Pokud to budeš psát jako makro, doporučuji celý výraz uzavřít do závorek abys předešel neočekávanému rozvoji makra.
Foat a double jsou trochu ošemetný kvůli zaokrouhlování které vzniká tím, že je potřeba vyjádřit nekonečný počet reálných čísel pomocí konečného počtu kombinací nul a jedniček.
Je pro tvou aplikaci použitelná reprezentace s pevnou desetinnou čárkou? Pokud ano, jeví se mi to jako lepší řešení.
hu
// nevim, jak se to pise v C++, ale v js treba takto
N = 100; T = 0.12; value = 100.012;
x = value - N;
vyhovuje = -T<=x && x<=T;
// ale, jako, klidne si na to napis funkci, bude to tak vic prehlednejsi
#define JE_V_TOLERANCI(stred, tolerance, hodnota) ( ((stred - tolerance) <= hodnota) && (hodnota <= (stred + tolerance)) )
C makra jsem nějakou dobu nepsal, tak snad to bude správně.
hu
https://h0nza.blogspot.com/2012/03/inline-funkce-v-c-c.html
https://www.uamt.feec.vutbr.cz/~richter/vyuka/1314_ppc/bppc/prednasky/06_Prednasky_13_inlinefce.pdf
https://cs.gadget-info.com/difference-between-inline
docela by mě zajímalo jak se front-end programátor v html5+CSS3+JavaScript dostane k programování v C ... to jako za nim příde šéf a řekne mu "chlapče odteď budeš embedded programátor v C" ... :)
to je jako kdyby ředitel nemocnice přišel za gynekologem a řek mu "hele brácho zejtra máme tu transplantaci srdce tak ji budeš dělat ty místo chirurga kapišto ?" :) ) ) čiky čiky ) )
#1 Kenvelo
"Díky bohu, že počítače vymysleli muži. Kdyby to byly ženy, tak binární soustavu reprezentují jedničky, nuly a "možná""
Fuzzy logické úrovně a Fuzzy Signálové Procesory (FSP) vymysleli také muži a používají všechny úrovně mezi log.0 a log.1.
Analogové počítače (stále se používají, protože pracují v reálném čase) vymysleli také muži a nepoužívají jen log.0 a log.1.
Spojením analogových počítačů a Fuzzy signálových procesorů (FSP) vznikají velmi výkonné systémy, které znají všechno možné mezi log.0 a log.1. Jak se programují? Pomocí grafických programovacích nástrojů se znalostí diferenciálního a integrálního počtu.
V těchto počítačích se tolerance 100 +- 0,2 vyhodnocuje analogově, pomocí analogových komparátorů. Výsledek je prostě "fuzzy".
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Overflow a float — založil Mara
Float X double — založil Hurys
C# - DataGridView + float — založil BDS
Double (float) — založil jack22
Delenie 2 float-ov — založil lukas.balaz
Moderátoři diskuze