» »

[C] deljenje

[C] deljenje

xardas ::

Zdravo,

pri svojem programu sem naletel na napako, ki me muči že kar nekaj časa. Razvijam program na ploščici FRI-SMS. Program je zapisan v več .c datotekah. V programu imam definirano eno spremeljivko tipa float, ki ji tekom izvajanja programa spreminjam vrednost iz druge datoteke in ne tam, kjer je definirana.

// Program dovoli tole
spremeljivka=spremeljivka+1;

// Ne dovoli pa tega
spremeljivka=spremeljivka/5.0;

Bi mogoče kdo vedel v čem je problem?

Arto ::

A ti vrže kakšno napako? Bi moral morda kej castat?

technolog ::

spremeljivka=spremeljivka/5.0;

napiši raje:

spremeljivka/=5;

In bo najbrž delalo.

Zgodovina sprememb…

Mavrik ::

In seveda skoraj gotovo ne bo delalo to kar on hoče. Ni vseeno a delaš deljenje s plavajočo vejico ali celoštevilčno deljenje.

@xardas: Če ne boš prilepil dejanske kode ti ne moremo kaj prida pomagati.
The truth is rarely pure and never simple.

Invictus ::

Najbrž je spremenljivka tipa integer ...
"Life is hard; it's even harder when you're stupid."

http://goo.gl/2YuS2x

Mavrik ::

"Najbrž" je lahko karkoli. Med drugim (IIRC) FRI-SMS procesor nima enote za deljenje in lahko prevajalnik umre zaradi tega ker ne zna (oz. noče brez dodatnih opcij) emulirati deljenja.

Brez kode in izpisa napak lahko samo nakladamo.
The truth is rarely pure and never simple.

technolog ::

Kako da ne bo delalo?

Če je spremenljivka tipa FLOAT, se bo itak castalo 5 na 5.0, tako da v nobenem primeru z mojo rešitvijo ne bo na izgubi. Če je pa tipa INT, potem pa se bo zadeva celo scompilala.

Win - win torej. Kaj ti je?

Mavrik ::

Če je spremenljivka tipa FLOAT, se bo itak castalo 5 na 5.0, tako da v nobenem primeru z mojo rešitvijo ne bo na izgubi. Če je pa tipa INT, potem pa se bo zadeva celo scompilala.


Pod pogojem da si je ni scastal. Kar ne moremo vedeti ker nimamo kode.

Prav tako preberi še enkrat kakšno neumnost si napisal:
Kako točno bi naenkrat začelo delat, če deliš float z intom, če ti float z doublom ne dela? Po keri logiki? Ti sploh znaš programirat v Cju?
To me bolj spominja na "piflarsko" programiranje tistih, ki ne razumejo programiranja - "ej, dajmo mal probat stvari okol drkat ki jih ne razumemo, saj enkrat bo že delalo".
The truth is rarely pure and never simple.

Zgodovina sprememb…

  • spremenil: Mavrik ()

technolog ::

FLOAT/FLOAT OK
INT/FLOAT NI OK

FLOAT/INT OK
INT/INT OK

Sepravi ne glede na to, ali je spremenljivka "spremenljivka" tipa int ali float (tega ne vemo), bo deljenje z int veljavno in program se bo scompilal.

Kot float mislim število s plavajočo vejico. Naj bo to to v tem primeru.

Zgodovina sprememb…

joze67 ::

V C je deljenje celoštevilsko (int) če in samo če sta oba, deljenec in delitel, celi števili. V vseh - vseh - ostalih primerih gre za double deljenje.

Ampak težava ne bo nastopila pri deljenju, ampak pri shranjevanju rezultata.

LP

xardas ::

Deljenje je bilo tipa: FLOAT/FLOAT

Zadevo sem rešil tako, da sem število potem delil kar znotraj svoje datoteke.

Hvala vsem za pomoč.

Mavrik ::

Er, kje? "Svoje" datoteke?
The truth is rarely pure and never simple.

xardas ::

xardas je izjavil:

Zdravo,

pri svojem programu sem naletel na napako, ki me muči že kar nekaj časa. Razvijam program na ploščici FRI-SMS. Program je zapisan v več .c datotekah. V programu imam definirano eno spremeljivko tipa float, ki ji tekom izvajanja programa spreminjam vrednost iz druge datoteke in ne tam, kjer je definirana.


Spreminjal sem jo torej v tisti datoteki, kjer sem jo tudi definiral.

(čeprav mi še zmeraj ni jasno, kaj bi lahko bilo narobe)

Zgodovina sprememb…

  • spremenilo: xardas ()

Mavrik ::

A bi že prilepil source teh datotek (ki si jih spreminjal) da ti lahko povemo kaj je narobe? Al moramo res kristalno kroglo ven privleč?
The truth is rarely pure and never simple.

Zgodovina sprememb…

  • spremenil: Mavrik ()

mallard ::

Nima veze, Mavrik. Boljš je mal copy-pastat sem pa tja dokler stvar ne "dela" in ne imet pojma kaj se dogaja :)

xardas ::

Sourca ne bom prilepil ,ker ga tudi nisem dolžan. Stvar sem rešil na svoj način in sem tudi povedal kako. Še enkrat hvala vsem za predloge (pomoč). Stvar "dela", zato se tudi ne bom poglabljal v to, kje je bil problem, ker imam trenutno druge, pomembnejše obveznosti, kot pa biti pedanten računalničar (kar samo po sebi ni nič napačnega).

napsy ::

c implicitno casta int v float (po standardu), ce je treba ... kot pa so ze drugi omenili pa je cisto mozno da cpu ne zna deliti s plavajoco vejico.
"If you die, you die. But when you live you live. There is no time to waste."

technolog ::

Sej zato sm pa jst rekel, da v nobenem primeru ne bo nič narobe, če 5.0 zapiše kot 5, ker se bo v najslabšem primeru samo zgodil auto cast na float.

In me je Mavrik seveda napadel... In potem vse tiho je bilo...

joze67 ::

Ni te ravno napadel ... samo opozoril je, da ima xardas morda konceptualne težave, ki jih samo s sintaktičnim trikom ne bo rešil.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Python

Oddelek: Programiranje
203038 (1724) d_DJ
»

c# - mssql kombinacija / problem pri zapisu row-a v bazo

Oddelek: Programiranje
121598 (1407) darkolord
»

[Python] Deljenje stevila v obliko xE+y

Oddelek: Programiranje
71609 (1397) Jean-Paul
»

[Java] Deljenje in ostanek

Oddelek: Programiranje
143090 (2674) pr2501
»

[C++] Rekurzija

Oddelek: Programiranje
73360 (3101) A1eN

Več podobnih tem