Springen naar inhoud

Hoe exact moet een log getal zijn?


  • Log in om te kunnen reageren

#1

Der Dafmeister

    Der Dafmeister


  • >25 berichten
  • 37 berichten
  • Gebruiker

Geplaatst op 03 november 2008 - 21:15

Ik vroeg me af of er een regel was hoe exact een log getal moet zijn om hetzelfde getal te krijgen.

voorbeeld:
log2(8) = 3;
log(6)= 2,5849625007211561814537389439478

2^3 = 8;
2^2,5849625007211561814537389439478 = 5,9999999999;

Ik hoop hier mijn vraag duidelijk mee hebben te verwoord.

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Tommeke14

    Tommeke14


  • >250 berichten
  • 771 berichten
  • Ervaren gebruiker

Geplaatst op 03 november 2008 - 21:30

oneindig veel decimalen in principe

Beetje zelfde kwestie als 0.999999999999999999 = 1
http://en.wikipedia.org/wiki/0.999...

Nu kan je ook discussieren hoeveel 9's er moeten staan om 1 te geven

Veranderd door Tommeke14, 03 november 2008 - 21:30


#3

Thonan

    Thonan


  • >25 berichten
  • 79 berichten
  • Ervaren gebruiker

Geplaatst op 03 november 2008 - 21:35

Dat hangt er helemaal vanaf hoe nauwkeurig je het getal wilt weergeven. Het doorwerken van de 'fout' bij een logarime gaat als volgt:

Voor een functie f(x) = ln (x) ,geldt voor het doorwerken van de fout: (neem de afgeleide van de functie)

1/x * error_in_x

Voorbeeld:

Je wilt bijvoorbeeld het getal x = 6.0 :D 0.1 met een logaritme bepalen, dan gaat dat als volgt:

nieuwe_error = 1/6 * 0.1 = 0.0166666

en dus geldt voor de ln (x) = 1.79 :P 0.0167

Het gaat dus er helemaal om hoe nauwkeurig je het getal wilt weergeven, maar ik hoop dat het doorwerken van de fout bij een logaritme nu duidelijk is.

#4

dirkwb

    dirkwb


  • >1k berichten
  • 4198 berichten
  • Moderator

Geplaatst op 03 november 2008 - 21:36

Dat hangt er helemaal vanaf hoe nauwkeurig je het getal wilt weergeven.

Inderdaad en 'exact' betekent met een fout van nul punt uit.
Quitters never win and winners never quit.

#5

TD

    TD


  • >5k berichten
  • 24137 berichten
  • VIP

Geplaatst op 03 november 2008 - 21:44

Dit heeft niet veel met logaritmen op zich te maken, in het algemeen vraag je je dus af hoeveel decimalen je moet geven om een getal exact weer te geven. Het antwoord is simpel: als je het exact wil, moet je alle decimalen geven. Voor getallen met een eindige of herhalende decimale ontwikkeling kan je dat nog opschrijven, maar voor irrationale getallen gaat dat niet. Waar je dan ook afbreekt, wat je overhoudt is een benadering.
"Malgré moi, l'infini me tourmente." (Alfred de Musset)

#6

Vladimir Lenin

    Vladimir Lenin


  • >250 berichten
  • 829 berichten
  • Ervaren gebruiker

Geplaatst op 03 november 2008 - 21:50

Ik vraag me af wat je er mee bedoelt, wiskundig gezien moet het getal echt exact zijn, dus op oneindig veel cijfers na de komma juist.

In computers en rekenmachines, wordt er gerekend tot op 8 14 decimalen na de komma, dus als jij een getal ingeeft met 18 cijfers na de komma maakt dat voor je toestel weinig uit. Ik geef toe dat er sommige variaties zijn, mijn TI-83 plus kan bijvoorbeeld tot 16 cijfers na de komma gaan, maar hoe dan ook, vroeg of laat stopt het. In feite begrijpt een computer de verzameling LaTeX niet, hij begrijpt maximum de verzameling LaTeX . Tenzij een symbolische, maar die werkt alleen met symboolen. In een computer dienen de types: float, double en decimal voor die getallen.
"Als je niet leeft zoals je denkt, zul je snel gaan denken zoals je leeft."
--Vladimir Lenin-- (Владимир Ильич Ульянов)

#7

Thonan

    Thonan


  • >25 berichten
  • 79 berichten
  • Ervaren gebruiker

Geplaatst op 03 november 2008 - 22:21

In een computer dienen de types: float, double en decimal voor die getallen.

Zelfs die hebben een beperkte machineprecisie die je in de praktijk overigens (bijna) nooit bereikt. Je kan zelf een script schrijven om dat op te zoeken, maar dat terzijde.

#8

Rogier

    Rogier


  • >5k berichten
  • 5679 berichten
  • VIP

Geplaatst op 03 november 2008 - 22:34

Zelfs die hebben een beperkte machineprecisie die je in de praktijk overigens (bijna) nooit bereikt.

Toch wel, 1/10 (dus 0.1) kan bijvoorbeeld al niet foutloos worden opgeslagen in een float of double.
In theory, there's no difference between theory and practice. In practice, there is.

#9

Thonan

    Thonan


  • >25 berichten
  • 79 berichten
  • Ervaren gebruiker

Geplaatst op 03 november 2008 - 22:40

Toch wel, 1/10 (dus 0.1) kan bijvoorbeeld al niet foutloos worden opgeslagen in een float of double.


Misschien kan je dat even toelichten, want met dergelijke getallen heb ik zelf nog nooit problemen gehad.

#10

Vladimir Lenin

    Vladimir Lenin


  • >250 berichten
  • 829 berichten
  • Ervaren gebruiker

Geplaatst op 03 november 2008 - 22:50

Toch wel, 1/10 (dus 0.1) kan bijvoorbeeld al niet foutloos worden opgeslagen in een float of double.

Dat komt omdat een rekenmachine/computer met machten van twee werkt. Al die bestandstypes hebben een soort van type als: GGGGGGGGGEEEEE. Hierbij staat G voor een deel van het getal, en E voor een deel van de exponent. Uiteraard veel langer. maar om het wat simpel voor te stellen komt het er op neer dat het getal dat opgeslagen dat is:
LaTeX . Afhankelijk van het type, worden de GGGG... en de EEEE.... rij langer of korter, uiteraard ook toegapast met de complement-regel.
De computer zoekt dan altijd hoe hij het getal het best kan weergeven in een dergelijke notatie. Stel dus dat je 0.1 met opslaan, en we nemen voor G 10 (000001010) dan nemen we voor E dus -6.64385619, we vereenvoudigen naar -6, passen de complement-regel toe: [tex]2^{lengte_E's}-|getal|=2^5-6=26. Dus wordt dit opgeslagen als 000001010_11010. Ik zet hier bewust een underscore, maar het is slechts op de leesbaarheid te bevorderen, in het toestel staat die er uiteraard niet. Als je het dan uitrekent bekom je: 0.15625, ik weet dat dit in de verste verte niet lijkt op 0.1, maar zoals ik al zei, de computer zoekt een optimalere verdeling, en bovendien is mijn lengte van de rijen veel te klein (een double telt 8 bytes, dus 64 1 en 0-en). Ik dacht met een lengte van 12 voor exponenten, maar ik weet het niet zeker.

Veranderd door Vladimir Lenin, 03 november 2008 - 22:53

"Als je niet leeft zoals je denkt, zul je snel gaan denken zoals je leeft."
--Vladimir Lenin-- (Владимир Ильич Ульянов)

#11

Rogier

    Rogier


  • >5k berichten
  • 5679 berichten
  • VIP

Geplaatst op 03 november 2008 - 23:01

Misschien kan je dat even toelichten, want met dergelijke getallen heb ik zelf nog nooit problemen gehad.

1/10 oftewel 0.1 kan niet exact worden gerepresenteerd in een float of double, dat wordt dan iets als 0.09999999999784 of 1.0000000036 ofzo.
Floating point getallen worden namelijk opgeslagen in de vorm 1.(binaire mantissa) x 10N, en 1/10 heeft in die vorm geen eindige breukontwikkeling. 1/4 oftewel 0.25 past er bijvoorbeeld wel exact in.

Dat je daar in normale situaties geen problemen mee hebt komt omdat resultaten altijd afgerond worden weergegeven. En omdat je cpu intern met 80 bits precisie werkt, en floats en doubles 32 respectievelijk 64 bit zijn.
In theory, there's no difference between theory and practice. In practice, there is.

#12

Vladimir Lenin

    Vladimir Lenin


  • >250 berichten
  • 829 berichten
  • Ervaren gebruiker

Geplaatst op 03 november 2008 - 23:06

1/10 oftewel 0.1 kan niet exact worden gerepresenteerd in een float of double, dat wordt dan iets als 0.09999999999784 of 1.0000000036 ofzo.
Floating point getallen worden namelijk opgeslagen in de vorm 1.(binaire mantissa) x 10N, en 1/10 heeft in die vorm geen eindige breukontwikkeling. 1/4 oftewel 0.25 past er bijvoorbeeld wel exact in.

Dat je daar in normale situaties geen problemen mee hebt komt omdat resultaten altijd afgerond worden weergegeven. En omdat je cpu intern met 80 bits precisie werkt, en floats en doubles 32 respectievelijk 64 bit zijn.

Dat kan ik alleen maar beamen. De precisie is gewoon groot genoeg. En je mag niet vergeten dat alvorens het resultaat op het scherm komt het ook alweer afgerond is. Dus stel dat je bijvoorbeeld ingeeft ln(7.3890561) dan berekent je computer dat. Wiskundig kom je iet uit als 2.001..., maar je rekentoestel geeft 2, omdat zowel input als output afgerond worden.
"Als je niet leeft zoals je denkt, zul je snel gaan denken zoals je leeft."
--Vladimir Lenin-- (Владимир Ильич Ульянов)

#13

Vladimir Lenin

    Vladimir Lenin


  • >250 berichten
  • 829 berichten
  • Ervaren gebruiker

Geplaatst op 03 november 2008 - 23:13

Floating point getallen worden namelijk opgeslagen in de vorm 1.(binaire mantissa) x 10N

Ben je dat zeker, ik dacht dat een computer altijd ontworpen werd met machten van twee (is toepasbaar op zowat alles) bovendien werkt zo'n model sneller in een binaire machine
"Als je niet leeft zoals je denkt, zul je snel gaan denken zoals je leeft."
--Vladimir Lenin-- (Владимир Ильич Ульянов)

#14

Rogier

    Rogier


  • >5k berichten
  • 5679 berichten
  • VIP

Geplaatst op 03 november 2008 - 23:17

Nou, wat vind je van dit voorbeeld: (c++)
float x = 0.1; // of 0.1f, of 1.0/10.0, of 1e-1, of hoe je het ook wilt initialiseren
float y = 0;
for (int i=0; i<10; i++)
{
  y = y+x;
}
float z = 1.0;
if (y==z)
{
  printf("Gefeliciteerd, uw computer kan getallen tot 1 decimaal correct optellen");
}
Het verschil tussen y en z in die if is zelfs groter dan 1e-7.

Ben je dat zeker, ik dacht dat een computer altijd ontworpen werd met machten van twee (is toepasbaar op zowat alles) bovendien werkt zo'n model sneller in een binaire machine

Foutje, moest uiteraard 2N zijn inderdaad.
In theory, there's no difference between theory and practice. In practice, there is.

#15

Vladimir Lenin

    Vladimir Lenin


  • >250 berichten
  • 829 berichten
  • Ervaren gebruiker

Geplaatst op 03 november 2008 - 23:19

Nou dat betekent dat hij niet met machten van 10 werkt. Anders had hij het opgeslagen onder de vorm LaTeX en was het juist geweest, in dat geval kan je dus zeggen dat de basis van de macht iets anders moet zijn.

Overigens stel ik mij vragen of deze topic bij wiskunde thuishoort, en niet bij programmeren bijvoorbeeld

oeps, onderstaande reactie niet gelezen :D

Veranderd door Vladimir Lenin, 03 november 2008 - 23:20

"Als je niet leeft zoals je denkt, zul je snel gaan denken zoals je leeft."
--Vladimir Lenin-- (Владимир Ильич Ульянов)





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures