C# Verschil tussen 2 waarde

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi Tweakers,

Ik zoek al dik een uur naar een functie die mij het verschil kan geven tussen twee waarde. Ik ben wiskundig ook niet heel sterk en heb ook niet echt een idee waar ik naar moet zoeken.

Voordat iedereen meteen roept dat ik gewoon de min functie moet gebruiken, dat is niet helemaal wat ik bedoel. De functie zou namelijk het volgende resultaat moeten geven:
code:
1
2
3
4
5
6
double GeefVerschil(double A, double B)

A=10, B=20, resultaat = 10. want er zit een verschil van 10 tussen 10 en 20.
A=20, B=10, resultaat = 10, want er zit een verschil van 10 tussen 20 en 10.
A=-10, B=10, resultaat = 20, want er zit een verschil van 20 tussen -10 en 10.
A=-10,505, B=10, resultaat = 20,505

In de eerste 2 voorbeelden zou het inderdaad gewoon kunnen door de grootste waarde minus de kleinste waarde. Maar zodra één van beide waarde negatief is heb ik een probleem.

Via Google geeft men aan Math.Abs(A-B) te gebruiken, maar die functie geeft een integer terug waar ik dus een double moet hebben.

Ik weet best dan 10 - 10 nul is, maar het verschil tussen 10 en -10 zou in deze functie 20 moeten zijn. Want om van -10 naar 10 te komen moet ik 20 bij die -10 optellen.

Ik hoop dat ik een beetje duidelijk heb kunnen maken waar ik naar zoek en dat iemand mij kan helpen met de naam van deze functie of een voorbeeld stukje C# code.

Potentieel extra nadeel is dat ik dit in NETMF moet doen.

Bedankt alvast voor alle hulp!

[ Voor 0% gewijzigd door Verwijderd op 27-05-2012 12:14 . Reden: Foutje waar RobIll op wees aangepast. ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Math.Abs() heeft nogal wat overloads; ook een die een double teruggeeft?
Verwijderd schreef op zondag 27 mei 2012 @ 12:03:
code:
1
A=-10,505, B=10, resultaat = 19,495.
Dat zou -20.505 moeten zijn volgens mij :?

[ Voor 55% gewijzigd door RobIII op 27-05-2012 12:34 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • keesdewit
  • Registratie: December 2003
  • Laatst online: 19-06 20:46
Als je een integer naar een double wil omzetten kan dat als volgt:

int theValueToConvert = Convert.ToInt32(doubleValue)

Daarvoor kun je het getal absoluut maken met Math.Abs()

Of wel:

C#:
1
int theValueToConvert = Convert.ToInt32(Math.Abs(integerToConvert));


@RobIII: Inderdaad... duh..

[ Voor 5% gewijzigd door keesdewit op 27-05-2012 12:11 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Tnx voor de snelle reacties! (@RobIII, tnx, fout aangepast, alleen zou het verschil altijd een positief getal moeten zijn)

In het NETMF framework kent Math.Abs alleen een functie voor het meegeven van een int, de retourwaarde is dan ook een it.

Ik zoek niet echt een functie om double om ze zetten naar een int. Ik zoek eigenlijk een functie om de double te geven die het verschil aangeeft tussen 2 doubles.

Waarbij het "verschil" tussen 10 en -10 dus niet 0 zou moeten zijn, maar 20.

[ Voor 9% gewijzigd door Verwijderd op 27-05-2012 12:18 ]


Acties:
  • 0 Henk 'm!

  • ZaPPZion
  • Registratie: Februari 2009
  • Laatst online: 28-08 12:46
TS wil in dit geval helemaal geen int terug krijgen, hij wil een double, aangezien er een decimaal getal uit kan komen. Wat mij betreft de simpelste oplossing:

C#:
1
2
3
4
5
6
double GeefVerschil(double A, double B)
{
double result = A - B;
if (result < 0) result = result * -1;
return result;
}

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
ZaPPZion schreef op zondag 27 mei 2012 @ 12:15:
TS wil in dit geval helemaal geen int terug krijgen, hij wil een double, aangezien er een decimaal getal uit kan komen. Wat mij betreft de simpelste oplossing:

C#:
1
2
3
4
5
6
double GeefVerschil(double A, double B)
{
double result = A - B;
if (result < 0) result = result * -1;
return result;
}
C#:
1
2
3
4
double GeefVerschil(double A, double B) {
  double result = A - B;
  return (result < 0) ? -result : result;
}

;)

Maar dat zou je alleen nodig hebben als Math.Abs(double value) niet zou bestaan onder NETMF. Geen idee of dat zo is.

[ Voor 14% gewijzigd door RobIII op 27-05-2012 12:18 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@ZaPPZion,

Tnx, maar deze gaat ook fout.

Als A=10 en B=-10 dan is met deze functie het resultaat 0 waar ik een functie zoek die in dat geval 20 terug zou geven.

[ Voor 22% gewijzigd door Verwijderd op 27-05-2012 12:18 ]


Acties:
  • 0 Henk 'm!

  • Zeebonk
  • Registratie: Augustus 2005
  • Laatst online: 30-07 20:50
Tenzij NETMF iets vreemds met doubles of wiskunde doet moet het gewoon werken

A - B = 10 - -10 = 10 + 10 = 20

Acties:
  • 0 Henk 'm!

  • Robbiedobbie
  • Registratie: Augustus 2009
  • Laatst online: 16-09 19:30
Die functie zal geen 0 terug geven. Je doet namelijk A - B = 10 - (-10) = 10 + 10 = 20.
- en - is + :p (basis rekenregels, en ik weet zeker dat deze ook gevolgd worden hier.)
als het andersom is, krijg je -10 - 10 = -20, en dan zorgt de -result ervoor dat 20 wordt teruggegeven.
Die functie is dus gewoon correct ;)

EDIT: Zeebonk was me voor ;)

[ Voor 4% gewijzigd door Robbiedobbie op 27-05-2012 12:21 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op zondag 27 mei 2012 @ 12:16:
@ZaPPZion,

Tnx, maar deze gaat ook fout.
Helemaal niet :? Je hebt wel basisschool rekenen gehad? :P

/spuit 11

[ Voor 19% gewijzigd door RobIII op 27-05-2012 12:31 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Damn... sorry, ik zit wel even heel erg veel te moeilijk te denken. Dit lijkt inderdaad de oplossing te zijn. Tnx!

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-09 22:43
Erm.. het verschil tussen A en B is B - A.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • ZaPPZion
  • Registratie: Februari 2009
  • Laatst online: 28-08 12:46
of A -B, dat mag beide, aangezien het hier gaat om het absolute verschil :)

Acties:
  • 0 Henk 'm!

Verwijderd

farlane schreef op zondag 27 mei 2012 @ 12:26:
Erm.. het verschil tussen A en B is B - A.
|B-A| inderdaad.

Acties:
  • 0 Henk 'm!

  • ZaPPZion
  • Registratie: Februari 2009
  • Laatst online: 28-08 12:46
|B-A| == |A-B|

Acties:
  • 0 Henk 'm!

  • Rub3s
  • Registratie: Mei 2007
  • Laatst online: 17-09 14:53

Rub3s

+3 , omdat het kan

Maar de volgorde maakt toch wel uit?: Grootste getal altijd als eerste minus het kleinste getal.

Of denk ik dan te moeilijk?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Rub3s schreef op zondag 27 mei 2012 @ 12:37:
Of denk ik dan te moeilijk?
:Y

|100 - 10| = 90
|10 - 100| = 90

[ Voor 38% gewijzigd door RobIII op 27-05-2012 12:41 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Probeer het hier eens mee;
code:
1
2
3
4
5
6
7
8
        private double Distance(double point1, double point2)
        {
            if (point2 < point1)
            {
                return point1 - point2;
            }
            return (point2 - point1);
        }

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Serieus, is het dan zo moeilijk? :? Wat is er mis met Math.Abs() :?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Phyxion
  • Registratie: April 2004
  • Niet online

Phyxion

_/-\o_

ZaPPZion schreef op zondag 27 mei 2012 @ 12:15:
TS wil in dit geval helemaal geen int terug krijgen, hij wil een double, aangezien er een decimaal getal uit kan komen. Wat mij betreft de simpelste oplossing:

C#:
1
2
3
4
5
6
double GeefVerschil(double A, double B)
{
double result = A - B;
if (result < 0) result = result * -1;
return result;
}
Waarom het wiel opnieuw uitvinden :?
C#:
1
2
3
4
double GeefVerschil(double A, double B) 
{
    return Math.Abs(A-B);
}


Trouwens, dit was ook gewoon op Google te vinden.

[ Voor 4% gewijzigd door Phyxion op 27-05-2012 13:02 . Reden: Google! ]

'You like a gay cowboy and you look like a gay terrorist.' - James May


Acties:
  • 0 Henk 'm!

  • Zeebonk
  • Registratie: Augustus 2005
  • Laatst online: 30-07 20:50
Phyxion schreef op zondag 27 mei 2012 @ 13:01:
[...]

Waarom het wiel opnieuw uitvinden :?
C#:
1
2
3
4
double GeefVerschil(double A, double B) 
{
    return Math.Abs(A-B);
}


Trouwens, dit was ook gewoon op Google te vinden.
Waarom een functie wrappen die niet aanwezig is in het framework dat hij gebruikt met een naam die de lading niet dekt?

Acties:
  • 0 Henk 'm!

  • Phyxion
  • Registratie: April 2004
  • Niet online

Phyxion

_/-\o_

Zeebonk schreef op zondag 27 mei 2012 @ 13:06:
[...]


Waarom een functie wrappen die niet aanwezig is in het framework dat hij gebruikt met een naam die de lading niet dekt?
Ik had niet gelezen dat het met .NET Micro Framework moest :X

In dat geval zou je ook zoiets kunnen doen:
C#:
1
2
3
4
5
6
7
8
        public static double Abs(double x)
        {
            if (x >= 0.0F)
                return x;
            return -x;
        }

        + zie boven :)

'You like a gay cowboy and you look like a gay terrorist.' - James May

Pagina: 1