Significantie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Raav S

Raav S

19/01/2014 18:47:08
Quote Anchor link
Ik ben bezig met een script dat mijn antwoord controleerd op een som (bijvoorbeeld 5+970-1000+10*15 = ?)
het probleem is dat ik niet zou weten hoe ik de antwoorden op de juiste significantie af moet ronden, een som als (f =1/T -> 1/3 = ? zou 0,4 moeten antwoorden aangezien dit een natuurkunde formule is, ik probeer een manier te vinden om altijd de juiste significantie te krijgen.

Kan iemand mij hierbij helpen, want google is geen hulp.
 
PHP hulp

PHP hulp

18/02/2025 12:11:34
 
Php knipper

php knipper

19/01/2014 19:06:20
Quote Anchor link
is dat niet de formule om frequentie te berekenen?
Gewijzigd op 19/01/2014 19:06:30 door php knipper
 
Raav S

Raav S

19/01/2014 19:09:21
Quote Anchor link
dat is inderdaad de formule om frequentie mee te berekenen, maar dit helpt niet echt bij mijn probleem :(
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

19/01/2014 21:10:38
Quote Anchor link
Wat is het probleem dan precies?
Moet je keuzes maken tussen afronden naar boven/beneden/wiskundig?
 
Willem vp

Willem vp

19/01/2014 21:26:01
Quote Anchor link
Het gaat hier denk ik om het bepalen van het aantal significante cijfers. Als je bijvoorbeeld alleen maar getallen van 3 cijfers gebruikt, kan je antwoord nooit met 4 cijfers nauwkeurig worden uitgedrukt.
 
Raav S

Raav S

19/01/2014 21:42:52
Quote Anchor link
Inderdaad, ik wil de significantie regels toe kunnen passen,
zoals dat 11.1234 + 4.17 = 15.29
en niet 15.2934 want die laatste 2 cijfers zijn niet nouwkeurig genoeg,
of dat 10.00 * 20.0 = 200 en niet 200.0 want 1 van de getallen is niet nouwkeurig genoeg.

Dit zijn dingen die je gebruikt bij natuurkunde en scheikunde.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

19/01/2014 21:51:18
Quote Anchor link
Weet je dan van te voren welke input niet nauwkeurig genoeg is?
Want dan kan je dat vrij eenvoudig met round doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo round(11.1234, 2) + 4.17;
?>


Toevoeging op 19/01/2014 21:57:46:

Trouwens wel grappig, 11.1234 is niet nauwkeurig genoeg maar 4.17 wel
 
Raav S

Raav S

19/01/2014 22:10:07
Quote Anchor link
Helaas dat de nauwkeurigheid zal steeds veranderen, dus de simpele round() oplossing zal niet werken, ik ben denk ik meer opzoek naar een snippet van een script dat de juiste significantie antwoord ongeacht de ingevoerde nauwkeurigheid,

ik zei inderdaad iets verkeerd, de 4.17 is niet net zo nauwkeurig gemeten dus dat getal verpest de nauwkeurigheid van 11.1234
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

19/01/2014 22:19:50
Quote Anchor link
Dus als ik het goed begrijp wil je afronden naar het getal met de minste decimalen?
 
Erwin H

Erwin H

19/01/2014 22:25:45
Quote Anchor link
Ger, het gaat over de wiskundige significantie: http://nl.wikipedia.org/wiki/Significant_cijfer

Volgens mij zal je van alle getallen het aantal cijfers achter de komma moeten bepalen en dan het kleinste aantal nemen en je resultaat daarop formatten (afronden zo je wilt). Hier staan een aantal methodes om het aantal decimalen te bepalen: http://stackoverflow.com/questions/6619377/how-to-get-whole-and-decimal-part-of-a-number
 
Wouter J

Wouter J

19/01/2014 22:25:49
Quote Anchor link
Nee, significantie is het optellen van het aantal cijfers. Voorbeeldjes:

cijfersignificantie
1233
123.44
0.51
1.02
0.00011
0.00102
3.5E22


en daar zien we dan ook weer meteen het probleem. Als eerste ziet PHP 1.0 gewoon als 1 aan, dus tenzij je met een string werkt (wat niet kan in een formule) zou PHP daar nooit significatie 2 van kunnen maken.
Ten tweede moet je niet slechts het aantal getallen achter de komma tellen en de gene voor de komma, alle nullen aan het begin moeten weggedacht worden.
Als derde zal PHP 3.5E2 als 350 aanzien, wat dus voor significatie 2 en niet 3 wordt aangezien.
En als laatste zal PHP problemen gaan krijgen met het bepalen van de significatie van wiskundige getallen. Als je bijv. pi gaat gebruiken (pi()) dan moet dat niet gebruikt worden, aangezien deze wiskundige oneindigheid heeft. PHP zal dit echter aanzien als een getal met significatie 14. En getallen als 1 / 3 worden ook niet als wiskundig oneindig gezien, maar als significatie 15.

Dus 100% water dicht kun je het niet maken. De meest logische optie voor mij zou zijn om het getal naar een string om te zetten, de komma eruit te slopen, alle nullen ervoor en dan de lengte van de string tellen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
function sig($number) {
    $numberString = (string) $number;
    $numberString = preg_replace('/^0+|[.,]/', '', $numberString);

    return strlen($numberString);
}

?>


Ook deze code werkt niet. Het is dus naar mijn mening onmogelijk de significatie te bepalen, (string) 1.0 geeft namelijk '1' en niet '1.0'. Dus significatie 1, terwijl het 2 moet zijn.
Gewijzigd op 19/01/2014 22:36:26 door Wouter J
 
Erwin H

Erwin H

19/01/2014 22:31:12
Quote Anchor link
Wouter heeft inderdaad wel gelijk dat het aantal cijfers duidend is, niet het aantal achter de komma.
1000 is dan ook anders dan 1x10E3.
 
Raav S

Raav S

19/01/2014 23:55:55
Quote Anchor link
Significantie van het antwoord gaat anders met +,- dan met *,/ de engelse wikipedia heeft volgens een betere uitleg, toch raar dat niemand weet hoe die met significantie moet omgaan aangezien dit bij HAVO natuurkunde en scheikunde veel nodig is
 
Willem vp

Willem vp

20/01/2014 00:27:08
Quote Anchor link
Raav S op 19/01/2014 23:55:55:
toch raar dat niemand weet hoe die met significantie moet omgaan aangezien dit bij HAVO natuurkunde en scheikunde veel nodig is

Tsja, ze laten iedereen maar achter een computer plaatsnemen tegenwoordig... ;-)

Ik denk dat je er niet aan ontkomt om nog een stap rigoureuzer te werk te gaan dan Wouter beschrijft. Je zal alle gebruikte getallen als vanaf het moment van input als string moeten behandelen (en niet pas converteren naar een string zodra je cijfers moet gaan tellen). Bij een weakly typed taal als PHP kan het nog wel eens een uitdaging zijn om dat goed te doen...
 
Wouter J

Wouter J

20/01/2014 07:44:30
Quote Anchor link
Quote:
Significantie van het antwoord gaat anders met +,- dan met *,/ de engelse wikipedia heeft volgens een betere uitleg, toch raar dat niemand weet hoe die met significantie moet omgaan aangezien dit bij HAVO natuurkunde en scheikunde veel nodig is

Sorry Raav, maar ik weet best wat significatie is, vwo natuur-/scheikunde heeft dat namelijk ook.
En het heeft helemaal niks met +,-,* of / te maken. Significatie gaat om de gegevens die je gebruikt in de formules. Als je meetapparatuur (want daar komen die gegevens vandaan) niet preciezer kan zijn dan significatie 3 dan mag je antwoord ook niet preciezer zijn, hij is immers gebaseerd op een minder precies antwoord. Wat je vervolgens in die berekening doet maakt niks uit.
 
Willem vp

Willem vp

20/01/2014 10:00:55
Quote Anchor link
Wouter J op 20/01/2014 07:44:30:
En het heeft helemaal niks met +,-,* of / te maken.

Dat is niet helemaal waar. Bij optellen en aftrekken kijk je naar het aantal decimalen van het (gemeten) getal met het kleinste aantal significante decimalen. Dus 100,00 + 10,0 wordt 110,0 (en niet 110). Bij vermenigvuldigen en delen kijk je wel naar het totaal aantal significante cijfers van de (ook hier weer gemeten) invoerwaardes.
 
Raav S

Raav S

20/01/2014 20:32:54
Quote Anchor link
Dat is wat ik bedoel willem, ik neem aan dat de meeste hier wel een vergelijkbare opleiding hebben gedaan dus zouden moeten weten hoe dit gaat.

Maar heeft iemand misschien een idee hoe de de uitkomst significantie van een string als
"(100.00+25.0)*.004*4000"

kan halen, dit zou dus significantie = 1 moeten geven.

Toevoeging op 20/01/2014 21:20:02:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php

$som
= "20.0*0.010/0.0500";
$som2 = str_replace("*","[x]",$som);
$som2 = str_replace("/","[x]",$som2);
$vars = explode("[x]", $som2);
$sigs = array();
foreach ($vars as $value) {
    $vars2 = str_split($value);
    $check = true;
    $count = 0;
    foreach ($vars2 as $value2) {
        if ($check) {
            if ($value2 != "0") {
                if ($value2 != ".") {
                    $check = false;
                    }
                }
            }

        if ($check == false) {
            if ($value2 != ".") {
                $count++;
                }
            }
        
        }

    echo $value." => ".$count."<br />";
    array_push($sigs, $count);
    }

echo "kleinste significantie : ".min($sigs);
?>


dit is een manier om de kleinste significantie te vinden voor keer en gedeeld door sommen, maar ik moet hieraan een manier toevoegen die ook de kleinste significantie van plus en min sommen vind, en rekening kan houden met de reken regels(haakjes gaan voor, dan wortels en machten, dan keer en gedeeld door en daarna pas plus en min sommen uitrekenen)

Toevoeging op 20/01/2014 21:33:09:

dit is bijvoorbeeld een code om het kleinste aantal significante decimalen te berekenden

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

$som
= "20.0+0.010-0.0500";
$som2 = str_replace("+","[x]",$som);
$som2 = str_replace("-","[x]",$som2);
$vars = explode("[x]", $som2);
$sigs = array();
foreach ($vars as $value) {
    $sig = strlen(str_replace(".","", strrchr($value, ".")));
    array_push($sigs, $sig);
    echo $value." => ".$sig."<br />";
    }

echo "kleinste significantie decimalen: ".min($sigs);
?>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.