Ik ben met wat project euler problemen bezig en bij nummer 20 kom ik een raar afrondings issue tegen:
Nee, dit is geen fraaie code maar ik ben nog een beginner met scheme (Lees: nog geen week mee bezig) en zeker geen held met wiskunde.
Anyway, als ik de volgende code aanroep:
Dan zou ik verwachten dat er 4 uitkomt, maar er komt 3.0 uit. Ik heb al een ceiling toegevoegd toegevoegd aan removefirst, aangezien ik hoopte dat het een afrondingsprobleem was...
Voor heel veel (ook hele grote getallen) werkt het uitstekend, bijvoorbeeld :
Levert keurig 2.0 op.
Ik gebruik DrRacket 5.1 met als taal R5RS.
Is er misschien een bignum achtige library die ik moet gebruiken oid?
code:
1
2
3
4
5
6
| (define (digits x) (floor (/ (log x) (log 10)))) (define (firstnum x) (floor (/ x (expt 10 (digits x))))) (define (removefirst x) (ceiling (- x (* (firstnum x) (expt 10 (digits x)))))) |
Nee, dit is geen fraaie code maar ik ben nog een beginner met scheme (Lees: nog geen week mee bezig) en zeker geen held met wiskunde.
Anyway, als ik de volgende code aanroep:
code:
1
| (firstnum (removefirst 64000000000000000000000000)) |
Dan zou ik verwachten dat er 4 uitkomt, maar er komt 3.0 uit. Ik heb al een ceiling toegevoegd toegevoegd aan removefirst, aangezien ik hoopte dat het een afrondingsprobleem was...
Voor heel veel (ook hele grote getallen) werkt het uitstekend, bijvoorbeeld :
code:
1
| (firstnum (removefirst (removefirst (removefirst 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000)))) |
Levert keurig 2.0 op.
Ik gebruik DrRacket 5.1 met als taal R5RS.
Is er misschien een bignum achtige library die ik moet gebruiken oid?