hallo,
ik was bezig om een programmatje te schrijven dat uit een kommagetal haar exacte equivalent kan halen. Gezien mijn beperkte kennis en de beperkte mogelijkheden op m'n rekenbak denk ik dat er niks anders opzit dan een soort trial and error methode.
de code is behoorlijk nasty, maar werkt in principe wel. Alleen schijnt de rekenbak 0.1666666667 en 0.1666666667 heeeeeeel verschillend van elkaar te vinden
dit had ik tot nog toe:
op middeleeuwse manier kijkt t programma dus of (1/iets)² gelijk is aan de input.
Na 50 keer proberen word de W gelijk aan 0, en dus word dan gekeken of X*pi(1/iets)² gelijk is aan de input.
de output is dan als volgt, gebruikende de variabelen uit het stukje pseudo code:
U * pi *1/Z * wortel B
als iemand hier wijs uit komt, dan kan die mij waarschijnlijk ook vertellen waarom als ik 1/6 invul, hij het correcte antwoord geeft en waarom hij, als ik 0.1666666667 invul, hij geen uitkomst heeft. Dit heeft volgens mij te maken met afrondingsfout. Dit probeerde ik op te lossen door het volgende stukje code te vervangen:
waarbij 1e6 de nauwkeurigheid bepaald, hoe kleiner die waarde, hoe onnauwkeuriger.
de volledige code:
hij vind dan wel meestal een antwoord, maar echt vrolijk word ik daar niet van...
wie helpt mij ?
ik was bezig om een programmatje te schrijven dat uit een kommagetal haar exacte equivalent kan halen. Gezien mijn beperkte kennis en de beperkte mogelijkheden op m'n rekenbak denk ik dat er niks anders opzit dan een soort trial and error methode.
de code is behoorlijk nasty, maar werkt in principe wel. Alleen schijnt de rekenbak 0.1666666667 en 0.1666666667 heeeeeeel verschillend van elkaar te vinden
dit had ik tot nog toe:
code:
1
2
3
4
5
6
7
8
9
10
| 1 -> Z pi-1 -> W input -> A Label 0 (A/(U(pi-W)*(1/Z)))² -> B IF (B=Int B) THEN klaar ELSE Z+1 -> Z |
op middeleeuwse manier kijkt t programma dus of (1/iets)² gelijk is aan de input.
Na 50 keer proberen word de W gelijk aan 0, en dus word dan gekeken of X*pi(1/iets)² gelijk is aan de input.
de output is dan als volgt, gebruikende de variabelen uit het stukje pseudo code:
U * pi *1/Z * wortel B
als iemand hier wijs uit komt, dan kan die mij waarschijnlijk ook vertellen waarom als ik 1/6 invul, hij het correcte antwoord geeft en waarom hij, als ik 0.1666666667 invul, hij geen uitkomst heeft. Dit heeft volgens mij te maken met afrondingsfout. Dit probeerde ik op te lossen door het volgende stukje code te vervangen:
code:
vervangen door1
2
3
| IF (B=Int B) THEN klaar ELSE Z+1 -> Z |
code:
1
2
3
| IF (((Int (1e6 * B))/1e6)=Int B) THEN klaar ELSE Z+1 -> Z |
waarbij 1e6 de nauwkeurigheid bepaald, hoe kleiner die waarde, hoe onnauwkeuriger.
de volledige code:
code:
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
32
33
34
35
36
37
38
39
40
41
42
43
| ClrText 1 -> V: 1 -> Z: 1 -> U pi - 1 -> W ? -> A Abs A -> A Lbl 0 (A/(U(pi-W)*(1/Z)))² -> B If ((Int (1e1B))/1e1)=Int B Then Goto 1 Else Z+1 -> Z IfEnd If Z > 50 And pi-W=1 Then 0 -> W: 1 -> Z: 1 -> U Goto 0 IfEnd If Z>50 Then U+1 -> U 1 -> Z IfEnd If U = 10 Then ClrText Locate 1,1,"Niet gevonden" Stop IfEnd Goto 0 Lbl 1 ClrText Locate 1,2,"Is gelijk aan:" If 0 = W Then Locate 1,3,V Locate 2,3,"pi*" V+3 -> V IfEnd If Z =/= 1 Then Locate V,3,"1(insert hier zon breuk teken)" Locate V+2,3,Z V+4 -> V IfEnd If B =/= 1 Then Locate V,3,"wortelteken" Locate V+1,3,Int B IfEnd Locate 1,1,A |
hij vind dan wel meestal een antwoord, maar echt vrolijk word ik daar niet van...
wie helpt mij ?
[ Voor 27% gewijzigd door Arjan op 25-06-2003 23:12 ]
oprecht vertrouwen wordt nooit geschaad