Můj blog se přestěhoval. Přesměrovávám…

Měli byste být automaticky přesměrování. Pokud se tak nestane, pokračujte na http://blog.stastnarodina.com/honza/ a upravte si svoje záložky.

neděle 20. ledna 2008

C++ round

27.1. Aktualizováno: Někdo mě emailem upozornil (za což děkuji), že moje řešení funguje pouze pro kladná čísla. Zde je řešení, které nabízí on (mírně upravené, aby fungovalo po pouhém Cut&Paste :) ):

#include <cmath>
int function round(double num) {
  char sign = static_cast(num/fabs(num));
  return static_cast<int>(sign* (fabs(num)+ 0.5));
}
Původně jsem zde vlastně měl funkci, která také fungovala dobře jak pro kladná, tak pro záporná čísla:
#include <cmath>
int function round(double num) {
  return static_cast<int>(floor(num+0.5));
}

Nedá mi to a musím o tom napsat. C++ je jazyk, který moc v oblibě nemám a dost mě štve (hlavně teď, když musím programovat závěrečný příklad do kurzu C++ a potřeboval bych dělat úplně jiné věci)

Nejvíc mě asi štve, jak dlouho mi trvá, než najdu řešení nějaké chyby. Už už jsem se teď chtěl znova naštvat, jak je to C++ pitomé, že ani nemá zadefinovanou funkci round pro zaokrouhlení desetinného čísla na celé (pěkně od pěti desetin nahoru, jinak dolu), když mi google poradil parádní fintu. Stačí přičíst 0.5 a a vzít nejbližší nižší celé číslo (čili floor, které v C++ existuje).
Céčková funkce potom vypadá takto triviálně:

int round(double num) {
 return (int)(num+0.5);
}

Jsem asi z řady těch hloupějších a pohodlnějších programátorů a vůbec by mi nevadilo, kdyby taková funkce byla také zahrnuta v knihovně (nejlépe i s možností nastavení přesnosti zaokrouhlování). Takové funkce podle mě k modernímu jazyku patří.

Toto považuji jako mnohem lepší komfort pro programátora.

Štítky:

Komentáře: 0:

Okomentovat

Přihlášení k odběru Komentáře k příspěvku [Atom]

<< Domovská stránka