Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C] Meneer van dale wacht op antwoord

Pagina: 1
Acties:

  • jvaneijk
  • Registratie: Mei 2003
  • Laatst online: 29-05 12:10
Hoi allemaal,

Ten eerste wil ik alle tweakers even een gelukkig nieuwjaar wensen.

Nou daar komt ie dan.
Ik heb een te simpel probleem maar heb geen idee hoe het kan.
Ik moet een getal berekenen maar gaat erg vreemd

C:
1
memSizeAlphaX = (prefixed_sum_x+prefixed_sum_x2) * sizeof(int);

als ik dit bereken komt er hetvolgende uit
code:
1
memSizeAlphaX: -2147413328

let wel prefix_sum_x en prefix_sum_x2 zijn beide positief.
Nu zou je zeggen dat als hetgene tussen haakjes staat positief is het antwoord ook positief moet zijn. dit is niet het geval. Haal ik echter de haakjes weg dan krijg ik er wel een positief antwoord van terug.

Zou iemand mij kunnen vertellen wat het probleem zou kunnen zijn.
Lijkt mij toch een simpel iets maar ik kan het momenteel nog niet verklaren. Misschien ligt het aan het overmatig alcoholgebruik afgelopen dagen :P

iRacing Profiel


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Tja, dat zit in de buurt van -231, dus dan zou als je de basiskennis van ints weet al een lampje moeten gaan branden. ;)

{signature}


  • grizzlybear
  • Registratie: Oktober 2001
  • Laatst online: 12-10 18:43
Waarschijnlijk is het een overflow, wat is het type van prefix_sum_x en prefix_sum_x2? Het kan zijn dat bij de berekening een te klein type wordt gekozen voor de tussen variabele.

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:13

Dido

heforshe

Wat zijn de waardes van prefix_sum_x en prefix_sum_x2? Ik neem aan dat je die weet als je weet dat ze positief zijn?

Dat je een ander resultaat krijgt zonder haakjes is niet zo heel gek, natuurlijk :)

Wat betekent mijn avatar?


  • jvaneijk
  • Registratie: Mei 2003
  • Laatst online: 29-05 12:10
prefix_sum_x = 545277100,
prefix_sum_x2 = 1065353216

En het zijn unsigned ints.

iRacing Profiel


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Grof afgerond 1.55 Mrd * sizeof(int) dus en dat kan je wel uit je hoofd en dan weet je hoe laat het is. :P

{signature}


  • Brainstorm
  • Registratie: November 2000
  • Laatst online: 16-11 18:53
Het zijn dan wel unsigned ints, maar van welk type zijn 'memSizeAlphaX' en 'sizeof(int)'?

[edit]

En grotere getallen? C is voor mij al een tijdje geleden, maar kan misschien zoiets als ulong?

[ Voor 37% gewijzigd door Brainstorm op 02-01-2008 10:06 ]

Programmer's Drinking Song: 99 little bugs in the code, 99 bugs in the code, Fix one bug, compile it again, 100 little bugs in the code. (go to start if bugs>0)


  • jvaneijk
  • Registratie: Mei 2003
  • Laatst online: 29-05 12:10
Ja idd het was afgelopen dagen ook laat. En waarom zijn er nou geen grotere getallen mogelijk dan unsigned ints :(

iRacing Profiel


  • MisterData
  • Registratie: September 2001
  • Laatst online: 15-11 10:31
Waarschijnlijk op te lossen door voor memSizeAlphaX een groter type te kiezen (bijvoorbeeld een __int64 in VC++) :)

  • Cpt.Morgan
  • Registratie: Februari 2001
  • Laatst online: 20-11 20:09
Maak van 'memSizeAlphaX' ook een unsigned int... mits sizeof(int) 2 is, lukt het dan wel....

  • jvaneijk
  • Registratie: Mei 2003
  • Laatst online: 29-05 12:10
Ja dat had ik ook in gedachten, maar probleem is ik heb alleen de beschikking over unsigned ints als grootste geheel getal.
Omdat dit GP-berekeningen zijn op de grafische kaart via CUDA.

iRacing Profiel


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:13

Dido

heforshe

Dan kun je kennelijk niet genoeg geheugen aanspreken :)

Wat betekent mijn avatar?


  • jvaneijk
  • Registratie: Mei 2003
  • Laatst online: 29-05 12:10
Nee, Ik ben idd nog niet helemaal wakker. Ik kan dus alleen unsigned ints gebruiken als grootste getal. Dus als ik het wil oplossen moet ik even mijn code herschrijven. Helaas heb ik daar nu geen tijd meer voor aangezien ik 12 jan moet afstuderen. Nou ja mooi resultaat voor future work :)

iRacing Profiel

Pagina: 1