Toon posts:

[java] Math probleempje

Pagina: 1
Acties:
  • 127 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo allemaal,

Ik heb een klasse Angle met daarin 2 attributen :
deg (aantal graden);
rad (aantal radialen);

Nu heb ik 2 set() methodes waarmee de attributen geset kunnen worden.
1 met als attribuut een int, dat zijn graden.
1 met als attribuut een double, dat zijn radialen.

Als ik nu onderstaande methode uitvoer met a = 45, wordt rad 0.
Dit klopt dus niet. Wie kan me helpen?
Als ik op n rekenmachine (45/180*Math.PI) uitvoer, komt er geen 0 uit!?!?

code:
1
2
3
4
5
6
7
8
9
private void set(int a)
{
    while (a >  360) a -= 360;
    while (a <= 0) a += 360;
    deg  = a;
    System.out.println("DEG:" +  deg);
    rad = deg/180*Math.PI;
    System.out.println("rad:" +  rad);
}

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:33
is de variable rad een integer?

deg is een integer zeg je, die deel je door 180 (ook een integer), dan is de uitkomst 0, want een integer kent geen waardes na de komma.

https://fgheysels.github.io/


  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08-2025
Misschien dat
Math.PI*deg/180
wel werkt.
Anders moet je van deg echt een double maken.

| Toen / Nu


Verwijderd

Topicstarter
rad = ((double)deg)/180*Math.PI;
Dit werkt wel: TNX

  • windancer
  • Registratie: Maart 2000
  • Laatst online: 18-08 22:36
Is er een bepaalde reden dat je de hoek in je klasse op twee verschillende manier wilt opslaan ? Persoonlijk zou ik 1 van de representaties kiezen en als om de andere gevraagd wordt deze berekenen uit de gekozen representatie. Hiermee voorkom je problemen met consistentie van je data.

  • vinnux
  • Registratie: Maart 2001
  • Niet online
windancer schreef op 22 september 2002 @ 13:39:
Is er een bepaalde reden dat je de hoek in je klasse op twee verschillende manier wilt opslaan ? Persoonlijk zou ik 1 van de representaties kiezen en als om de andere gevraagd wordt deze berekenen uit de gekozen representatie. Hiermee voorkom je problemen met consistentie van je data.
Op welke manier zou er in inconsistensie onstaan, als de enige manier om deze variabelen te zetten via 1 functie is ? De scope van deg en rad zijn private neem ik aan. Dus er is geen sprake van inconsistentie of enige kans daarop.

Wel is er sprake van redundantie, maar hier valt iets voor te zeggen als de berkening complex en zwaar is. Beter 1 keer uitrekenen dan elke keer als er naar gevraagd wordt.

  • vinnux
  • Registratie: Maart 2001
  • Niet online
Verwijderd schreef op 22 september 2002 @ 12:23:
rad = ((double)deg)/180*Math.PI;
Dit werkt wel: TNX
De vraag is nu snap je ook waarom?

int intA = 10;
int intB = 1;
double dblA = 2.5d;
double dblB = 1.75d;

intA + intB = 11 (int)
intA + dblA = 12 (int)
dblA + dblB = 5.25 (double)
dblA + intA = 12.5 (double)

Deze functie worden van links naar rechts berkend. Het eerset type variabele dat ie tegenkomt is het type van de uitkomst van die betreffende geslote berekening.
alle andere variabele/deel uitkomsten worden automatisch gecast naar dit type.

  • windancer
  • Registratie: Maart 2000
  • Laatst online: 18-08 22:36
Nu wil ik de klasse gaan uitbreiden met bijvoorbeeld het optellen van twee hoeken, de rekenkundige inverse van een hoek, etc. etc.. Allemaal operaties waarbij je de interne variabelen van een instantie van de Angle klasse moet gaan veranderen. Als je bij een van deze functies een van de waarden vergeet te updaten of verkeerd update heb je een probleem.

Tevens is het raar dat een int wordt gebruikt voor de hoek in graden en een double voor de hoek in radialen. Als ik nu een tangens functie implementeer voor deze klasse gaat hij mij waarschijnlijk een verschillende waarde geven afhankelijk van de keuze van de interne representatie van de hoek.

Tuurlijk van er in sommige gevallen iets voor te zeggen om een dubbele representatie te gebruiken, maar ik geloof daar in dit geval niet in. Maar hierom vroeg ik ook naar de motivatie van de poster.
vgouw schreef op 22 september 2002 @ 14:45:
[...]

Op welke manier zou er in inconsistensie onstaan, als de enige manier om deze variabelen te zetten via 1 functie is ? De scope van deg en rad zijn private neem ik aan. Dus er is geen sprake van inconsistentie of enige kans daarop.

Wel is er sprake van redundantie, maar hier valt iets voor te zeggen als de berkening complex en zwaar is. Beter 1 keer uitrekenen dan elke keer als er naar gevraagd wordt.

[ Voor 0% gewijzigd door windancer op 22-09-2002 15:47 . Reden: Brakke zinsconstructie ]


  • vinnux
  • Registratie: Maart 2001
  • Niet online
windancer schreef op 22 september 2002 @ 15:45:
Nu wil ik de klasse gaan uitbreiden met bijvoorbeeld het optellen van twee hoeken, de rekenkundige inverse van een hoek, etc. etc.. Allemaal operaties waarbij je de interne variabelen van een instantie van de Angle klasse moet gaan veranderen. Als je bij een van deze functies een van de waarden vergeet te updaten of verkeerd update heb je een probleem.
Updaten gebeurd via een centrale functie. Kan dus niks fout gaan.
Pagina: 1