376.77000E+00

Wiskunde is niet alleen een vak op school. Kom je ergens in de praktijk (bijvoorbeeld tijdens je werk) een wiskundig probleem tegen dan kun je hier om hulp vragen.
Plaats reactie
YoM333
Nieuw lid
Nieuw lid
Berichten: 5
Lid geworden op: 02 dec 2011, 16:26

376.77000E+00

Bericht door YoM333 » 02 dec 2011, 18:48

Hallo,

Via de computer "praat" ik met een elektrisch apparaat (programmeren). Dit apparaat geeft op het scherm afstanden weer zoals 1.00268 km (met een precisie van 5 decimalen). Als ik via het programma echter aan het apparaat om de afstand vraag, dan ontvang ik het volgende:

Ontvang: 376.77000E+00
Verwacht: 0.37677 km (376 meter en 77 centimeter)

Ontvang: 1.0026800E+03
Verwacht: 1.00268 km (1 kilometer, 2 meter en 68 centimeter)

Hoewel ik het getal dat ik verwacht herken in wat ik ontvang, begrijp ik de logica niet om dit "terug te keren" naar wat ik verwacht.

Herkent iemand deze notatie? Zo ja, heeft iemand een idee hoe je dit met een berekening weer kunt omzetten in "normaal" leesbare afstanden? Bij voorbaat dank voor uw hulp.

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: 376.77000E+00

Bericht door arie » 02 dec 2011, 19:30

De ontvangst is het getal in meters.
De E betekent 10-tot-de-macht:
376.77000E+00 = 376.77000 * 10^0 = 376.77000 * 1 = 376.77000 meter
1.0026800E+03 = 1.0026800 * 10^3 = 1.0026800 * 1000 meter = 1.0026800 km = 1002.6800 meter

De exponenten van 10 zijn wsch veelvouden van 3 om de omrekening naar kilo, mega, .... en milli, micro...
eenvoudiger te maken.

Kom je hiermee verder?

YoM333
Nieuw lid
Nieuw lid
Berichten: 5
Lid geworden op: 02 dec 2011, 16:26

Re: 376.77000E+00

Bericht door YoM333 » 02 dec 2011, 19:48

Hallo Arie, dank voor uw bericht!

Er begint wat te dagen nu inderdaad.

E+00 = 1
E+01 = 10
E+02 = 100
E+03 = 1000
Etc..

Logaritme komt dan in me op. Wiskundig ben ik niet erg sterk :roll:

Dit getal (376.77000), vermenigvuldigd met het logaritmische staartje (E+00 = maal 1), geeft altijd het resultaat in meters. Begrijp ik dat goed?

arie
Moderator
Moderator
Berichten: 3911
Lid geworden op: 09 mei 2008, 09:19

Re: 376.77000E+00

Bericht door arie » 02 dec 2011, 20:36

YoM333 schreef:Er begint wat te dagen nu inderdaad.

E+00 = 1
E+01 = 10
E+02 = 100
E+03 = 1000
Etc..
Klopt.
In aanvulling hierop:
E+00 = 1
E-01 = 0.1
E-02 = 0.01
E-03 = 0.001
Dus 2.15 E-03 = 2.15 * 10^(-3) = 2.15 mm = 0.00215 m

Het resultaat is in deze notatie inderdaad altijd in meters.

Voor de volledigheid:
Je log-waarde heeft alleen betrekking op de hele macht van 10:
log(100) = 2
log(1000) = 3
etc.
maar NIET op het getal tussen nul en 10 dat ervoor staat:
2 E+02 = 2 * 100 = 200
maar
log(200) = 2.3010299....

Het staartje is dus de exponent van 10.

YoM333
Nieuw lid
Nieuw lid
Berichten: 5
Lid geworden op: 02 dec 2011, 16:26

Re: 376.77000E+00

Bericht door YoM333 » 03 dec 2011, 00:20

Het is me duidelijk. Bedankt voor uw hulp Arie. Ik ga er mee aan de slag :D

Sjoerd Job
Vergevorderde
Vergevorderde
Berichten: 1144
Lid geworden op: 21 jan 2006, 15:09
Locatie: Krimpen aan den IJssel

Re: 376.77000E+00

Bericht door Sjoerd Job » 03 dec 2011, 08:15

Ik weet niet in welke taal je programmeert, maar als je in een C achtige taal programmeert, kan je zo'n getal inlezen met
- sscanf (tekst, "%e", &getal)
- getal = strtod (tekst, (char **)NULL);
- getal = atof (tekst)

jou programmeertaal zal ook wel soortgelijke functies hebben.
``Life is complex. It has real and imaginary parts.''

Gebruikersavatar
meneer van Hoesel
Vergevorderde
Vergevorderde
Berichten: 395
Lid geworden op: 20 apr 2010, 14:43
Locatie: Zwolle

Re: 376.77000E+00

Bericht door meneer van Hoesel » 04 dec 2011, 14:34

ik kan mij nog herinneren dat mijn oude TI−59 (maar ook de kleinere broertjes er van en de huidige grafische machines) twee vormen van notatie had, [Eng] en [EE], waarbij de eerste notatie wijze gebruikt werd voor technische weergave, machten van tien, waarbij die machten een veelvoud van 3 zijn... voor Mega, kilo, mili en zo voort

YoM333
Nieuw lid
Nieuw lid
Berichten: 5
Lid geworden op: 02 dec 2011, 16:26

Re: 376.77000E+00

Bericht door YoM333 » 09 dec 2011, 14:04

@Sjoerd: Helaas is het geen C-taal, het is Visual Basic .NET

Ik heb de volgende functie geprogrammeerd om mijn situatie op te lossen:
(De invoer, het exponent dat ik van de machine ontvang, is altijd in meter. Heb echter ook decibel geïntegreerd voor persoonlijke doeleinde)

Code: Selecteer alles

Public Function Exponent(ByVal Exp As String, _
                             Optional ByVal decibel As Boolean = False, _
                             Optional ByVal decimalen As Integer = 5, _
                             Optional ByVal uitkomstEenheid As String = "") As String

        Dim suffix As String = ""
        Exp = Exp.Replace(".", ",") 'Vertaling Engels -> Europees
        Dim dec As Decimal = Decimal.Parse(Exp, Globalization.NumberStyles.Any)
        Dim staartje As String = Exp.Split("E")(1)

        'Praten we over decibel? Sla dit over..
        If decibel = False Then

            If uitkomstEenheid = "" Then
                ' Converteer naar lengte-eenheid op basis van exponent,
                ' er is geen uitkomsteenheid gespecificeerd:
                Select Case staartje
                    Case "-12" 'Picometer
                        suffix = "pm"
                        dec = dec * 1000000000000
                    Case "-09" 'Nanometer
                        suffix = "nm"
                        dec = dec * 1000000000
                    Case "-06" 'Micrometer
                        suffix = "um"
                        dec = dec * 1000000
                    Case "-03" 'Millimeter
                        suffix = "mm"
                        dec = dec * 1000
                    Case "-02" 'Centimeter
                        suffix = "cm"
                        dec = dec * 100
                    Case "-01" 'Decimeter
                        suffix = "dm"
                        dec = dec * 10
                    Case "+00" 'Meter
                        suffix = "m"
                        'Invoer is in meter; niets doen.
                    Case "+01" 'Decameter
                        suffix = "dam"
                        dec = dec / 10
                    Case "+02" 'Hectometer
                        suffix = "hm"
                        dec = dec / 100
                    Case "+03" 'Kilometer
                        suffix = "km"
                        dec = dec / 1000
                    Case "+06" 'Megameter
                        suffix = "Mm"
                        dec = dec / 1000000
                    Case "+09" 'Gigameter
                        suffix = "gm"
                        dec = dec / 1000000000
                    Case "+12" 'Terameter
                        suffix = "tm"
                End Select
            Else
                'Er is een uitkomsteenheid gespecificeerd,
                'converteer naar de gekozen lengte-eenheid:
                Select Case uitkomstEenheid
                    Case "pm" 'Picometer
                        dec = dec * 1000000000000
                    Case "nm" 'Nanometer
                        dec = dec * 1000000000
                    Case "um" 'Micrometer
                        dec = dec * 1000000
                    Case "mm" 'Millimeter
                        dec = dec * 1000
                    Case "cm" 'Centimeter
                        dec = dec * 100
                    Case "dm" 'Decimeter
                        dec = dec * 10
                    Case "m" 'Meter
                        'Invoer is in meter; niets doen.
                    Case "dam" 'Decameter
                        dec = dec / 10
                    Case "hm" 'Hectometer
                        dec = dec / 100
                    Case "km" 'Kilometer
                        dec = dec / 1000
                    Case "Mm" 'Megameter
                        dec = dec / 100000
                    Case "gm" 'Gigameter
                        dec = dec / 1000000000
                    Case "tm" 'Terameter
                        dec = dec / 1000000000000
                End Select
            End If
        Else
            suffix = "dB"
        End If

        Dim formaat As String = "0."
        For i = 0 To decimalen - 1
            formaat = formaat & "0"
        Next

        If Not uitkomstEenheid = "" Then
            Return Format(dec, formaat) & " " & uitkomstEenheid
        Else
            Return Format(dec, formaat) & " " & suffix
        End If

    End Function
Enkele voorbeelden met deze functie zijn:

Code: Exponent("376.77000E+00")
Resultaat: 376,77000 m

Code: Exponent("376.77000E+00",false,5,"km")
Resultaat: 0,37677 km

Code: Exponent("1760E-09",false,0)
Resultaat: 1760 nm

Code: Exponent("1.0026800E+03")
Resultaat: 1,00268 km

Code: Exponent("7.8410000E+00",true,3)
Resultaat: 7,841 dB

Sjoerd Job
Vergevorderde
Vergevorderde
Berichten: 1144
Lid geworden op: 21 jan 2006, 15:09
Locatie: Krimpen aan den IJssel

Re: 376.77000E+00

Bericht door Sjoerd Job » 09 dec 2011, 14:56

Ik kan er dus van uitgaan dat
Convert.ToDouble(...)
niet aan je eisen voldoet?
``Life is complex. It has real and imaginary parts.''

YoM333
Nieuw lid
Nieuw lid
Berichten: 5
Lid geworden op: 02 dec 2011, 16:26

Re: 376.77000E+00

Bericht door YoM333 » 10 dec 2011, 17:41

@Sjoerd:

.toDouble doet inderdaad wat ik oorspronkelijk vroeg. Echter zie je aan bovenstaande code dat het veel meer doet dan .toDouble door uitvoer van de juiste eenheid te voorzien, en zelfs eenheidsconversies toe te passen indien gewenst. Dat is echter in mijn specifieke geval gewenst. Wellicht dat iemand anders met .toDouble gered is.

PS: met .toDouble moet je ook de punt eerst door een komma vervangen, op Europese computers. Anders krijg je iets onverwachts terug. Voorbeeld is:

dim invoer as string = "376.77000E+00"
msgbox(convert.toDouble(invoer.replace(".",",")))

Plaats reactie