Matte är inte direkt min starka sida, det här är antagligen väldigt enkelt. Ett alternativ kan vara att lagra summan och antalet. <b>>Men finns det enklare sätt?</b> Tack för svaren! #2 är absolut den bästa lösningen inser jag nu. jag kör på det spåret :)Räkna ut medeltal
Jag har ett tal, t.ex. 7,26 som jag vet är medeltalet av 20 andra (okända) tal.
Nu vill jag ta med en till siffra i uträkningen av medeltalet.
En lösning är ju:
((Medeltalet * Antal) + NyaTalet) / (Antal + 1)
Men finns det enklare sätt? Den här uträkningen kommer köras många gånger i en applikation (ASP.NET, C#), kan det påverka prestandan mycket om det är dåligt skrivet?Sv: Räkna ut medeltal
Sedan beräkna genomsnittet. Borde ge ett mer exakt värde, då flyttal inte är helt exakta (t.ex (1+3+6)/3 = 10/3, lägg till (10+1)/3+1 = 11/4 och lägg till ett igen (11+1)/4+1 = 12/5).
Eventuellt kan du beräkna genomsnittet och mellanlagra det om du gör fler läsningar än uppdateringar.Sv: Räkna ut medeltal
Nej, det är den formeln du får utgå ifrån, och det enda du kan göra är att flytta runt termerna i den.
Men...
<b>>kan det påverka prestandan mycket om det är dåligt skrivet?</b> (det är klart det kan...)
...men beroende på hur man löser det kan man få diverse problem. Ett problem du har nu är cancellation. Beroende på hur du använder dina data kan man lägga upp det på olika sätt.
Du har i princip tre alternativ + olika cachningsprinciper:
1. Gör det du gör nu; lagra medelvärdet och antalet tal. Så fort du vill hämta medelvärdet tar du bara det talet, när du vill lägga till använder du din formel. När du får tillräckligt många tal så kommer "Nya talet" inte längre kunna påverka "Medeltal*antal", och kancellationen är ett faktum. Från den punkten och framåt kommer medeltalet inte ändras.
2. Lagra istället "total summa hittils" och antalet tal. Så fort du vill hämta medelvärdet räknar du ut det, när du vill lägga till ett tal ökar du bara summan med talet och antalet med 1. Kancellationen kan nu ev. bli liiite bättre, men skillnaden borde vara försumbar.
3. Lagra alla tal. Sortera dem i nummerordning, summera dem underifrån (0.1+0.1+0.3+0.7) för att få totalen, och dividera sen med antalet. Kancellationen är "borta", men det är ganska ineffektivt.
Sen kan du ju cacha resultatet från 2:an eller 3:an om du känner att du har prestandaproblem.
Men om du inte bryr dig om kancellation så får det vara jävligt många beräkningar av den typen som du får göra om det ska spela någon roll.Sv:Räkna ut medeltal