Matematicke operace   zodpovězená otázka

C#, Algoritmy

Zdravím všechny zkušené programátory.

Včera jsem prováděl nějaké matematické operace - jednoduché výpočty. Narazil jsem na problém, kdy jsem potřeboval matici přenásobit 1/3, respektive vydělit 3.

Použil jsem proto něco takového:

M = M.Multiply(new Complex(1 / 3, 0));

(matice atp. jsou použity z jednoho mat. balíku, proto ta konstrukce takováto - nicméně jedná se o matici komplexních čísel a metoda Multiply, jak název napovídá, je přenásobení každého prvku v tomto případě komplexním číslem o reálné a imaginární složce, která je nulová momentálně)

Nicméně výsledkem této operace byla matice samých nul, proto jsem si jen tak mimo zkusil co mi udělá například:

double c = 1/3;

A opět nulové číslo. Na řešení jsem přišel, použil jsem:

M = M.Multiply(new Complex((double)1/3, 0));

Ale není mi úplně jasné, procč to tak musí být a jelikož provádím další a další výpočty, rád bych měl jasno, kdy se můžu spolehnout, že 1/2 není nula, ale 0.5.

Díky za případnou odpověď.

Aleš

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Myslím že by stačilo kdyby jsi napsal (1/3.0). Jde o to že int/int = int jde o celočíselné dělení když používáš celočíselné typy.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Je to tak, jak říkáte ;-) Díky, budu si na to holt muset dávat pozor.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud číslo napíšete jako 1, je to automaticky int (pokud je větší a nevejde se do intu, pak je to long). Pokud za něj dáte f (např. 2f, 2.45f atd.), je to float. Pokud je to desetinné číslo bez přípony, je to double (3.14 například).

Pokud chcete dělit opravdu desetinně, musí být alespoň jeden vstupní parametr typu float nebo double, jinak int / int je, jak již bylo řečeno výše, opět int. Stačí tedy jeden operand přetypovat na desetinné číslo, anebo, pokud to není proměnná, ho prostě zapsat třeba jako 1.0.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback