Cage-synth

Net een fout in het progje gevonden. Het moet (hopelijk) zo:

Code:
import mpmath as mp
from mpmath import *

mp.dps = 100


n = 3 #Voer base (=grondtal) in!


R = 1/(mp.mpf("4.55"))

print("eerste R is:", R)

for k in range(1,300):
    
    ck = int( ( (mp.mpf(n))**(mp.mpf(k)) ) * mp.mpf(R) )
    
    print(k, "geeft cijfer:", ck)
    print(k, "geeft argument int:",( (mp.mpf(n))**(mp.mpf(k)) ) * mp.mpf(R) )
    print(k, "geeft R:",mp.mpf(R) - (mp.mpf(ck)) * ( (mp.mpf(n))**(-mp.mpf(k)) ) )
    
    R = R - (mp.mpf(ck)) * ( (mp.mpf(n))**(-mp.mpf(k)) )
 
Dan krijg je:

200 geeft cijfer: 1
200 geeft argument int: 1.978021604085955948106705979080540633932654039332823966501869371999354975925099946401658361551786838
200 geeft R: 3.682116323109019254381407586110546201534289393392608320386243094541845857883719145745727284458872881e-96
201 geeft cijfer: 2
201 geeft argument int: 2.934064812257867844320117937241621901797962117998471899505608115998064927775299839204975084655360514
201 geeft R: 1.172208356709668307792459659436468707554055408804662149752677396186535510807184947684069234948158973e-96
202 geeft cijfer: 2
202 geeft argument int: 2.802194436773603532960353811724865705393886353995415698516824347994194783325899517614925253966081541
202 geeft R: 3.355723679098846589294770172117762095606440806086800928748221634014320617816735483301832184445876703e-97
203 geeft cijfer: 2
203 geeft argument int: 2.406583310320810598881061435174597116181659061986247095550473043982584349977698552844775761898244623
203 geeft R: 5.669370497662344264181613647021204356284030454335274058220375247306424543983641521222121294339723608e-98
204 geeft cijfer: 1
204 geeft argument int: 1.219749930962431796643184305523791348544977185958741286651419131947753049933095658534327285694733869
204 geeft R: 1.021392782107990659387265634661801589653967519913151520010068398500294271619689302589421202653216371e-98
205 geeft cijfer: 0
205 geeft argument int: 0.6592497928872953899295529165713740456349315578762238599542573958432591497992869756029818570842016059
205 geeft R: 1.021392782107990659387265634661801589653967519913151520010068398500294271619689302589421202653216371e-98
206 geeft cijfer: 1
206 geeft argument int: 1.977749378661886169788658749714122136904794673628671579862772187529777449397860926808945571252604818
206 geeft R: 5.049508137130624810767825221774235044728494160884712379867009708551686858014723894080100813547155668e-99
207 geeft cijfer: 2
207 geeft argument int: 2.933248135985658509365976249142366410714384020886014739588316562589332348193582780426836713757814453
207 geeft R: 1.606561681164436955364604471878381143521040135386843833044560190917516285893277806204026671557150307e-99
208 geeft cijfer: 2
208 geeft argument int: 2.79974440795697552809792874742709923214315206265804421876494968776799704458074834128051014127344336
208 geeft R: 4.589128625090410035635308885797631764518887935542209841037436850394594285194624435786686242271485205e-100
209 geeft cijfer: 2
209 geeft argument int: 2.399233223870926584293786242281297696429456187974132656294849063303991133742245023841530423820330081
209 geeft R: 7.636325629057568629650636081355718742883834627668003445680484974677380939485732270354927511714792479e-101
210 geeft cijfer: 1
210 geeft argument int: 1.197699671612779752881358726843893089288368563922397968884547189911973401226735071524591271460990243
210 geeft R: 1.260498858749813341866893951918952259166327173042320951564837719799287287408980255769605026548115885e-101
211 geeft cijfer: 0
211 geeft argument int: 0.5930990148383392586440761805316792678651056917671939066536415697359202036802052145737738143829707293
211 geeft R: 1.260498858749813341866893951918952259166327173042320951564837719799287287408980255769605026548115885e-101
212 geeft cijfer: 1
212 geeft argument int: 1.779297044515017775932228541595037803595317075301581719960924709207760611040615643721321443148912188
212 geeft R: 5.520736620489516432242559375370893165310485669728006744408769137017213260671189208156803059740407077e-102
213 geeft cijfer: 2
213 geeft argument int: 2.337891133545053327796685624785113410785951225904745159882774127623281833121846931163964329446736564
213 geeft R: 7.979019758171051079583059461584735477419616292645382302490304297001068517254469751306382559132392294e-103
214 geeft cijfer: 1
214 geeft argument int: 1.013673400635159983390056874355340232357853677714235479648322382869845499365540793491892988340209692
214 geeft R: 1.076286837170322057759704128973694481387428918729347788907397848058911690115660295961078860871125475e-104
215 geeft cijfer: 0
215 geeft argument int: 0.0410202019054799501701706230660206970735610331427064389449671486095364980966223804756789650206290771
215 geeft R: 1.076286837170322057759704128973694481387428918729347788907397848058911690115660295961078860871125475e-104
216 geeft cijfer: 0
216 geeft argument int: 0.1230606057164398505105118691980620912206830994281193168349014458286094942898671414270368950618872313
216 geeft R: 1.076286837170322057759704128973694481387428918729347788907397848058911690115660295961078860871125475e-104
217 geeft cijfer: 0
217 geeft argument int: 0.3691818171493195515315356075941862736620492982843579505047043374858284828696014242811106851856616939
217 geeft R: 1.076286837170322057759704128973694481387428918729347788907397848058911690115660295961078860871125475e-104
218 geeft cijfer: 1
218 geeft argument int: 1.107545451447958654594606822782558820986147894853073851514113012457485448608804272843332055556985082
218 geeft R: 1.045101613118012091415449871604394160441112149302801934012787724792601656412277377252424814828193331e-105
219 geeft cijfer: 0
219 geeft argument int: 0.3226363543438759637838204683476764629584436845592215545423390373724563458264128185299961666709552452
219 geeft R: 1.045101613118012091415449871604394160441112149302801934012787724792601656412277377252424814828193331e-105
220 geeft cijfer: 0
220 geeft argument int: 0.9679090630316278913514614050430293888753310536776646636270171121173690374792384555899885000128657357
220 geeft R: 1.045101613118012091415449871604394160441112149302801934012787724792601656412277377252424814828193331e-105
221 geeft cijfer: 2
221 geeft argument int: 2.903727189094883674054384215129088166625993161032993990881051336352107112437715366769965500038597207
221 geeft R: 3.252670384079966479945912480390200379645805168590481595638106317706375642089940007814349041701887813e-106
222 geeft cijfer: 2
222 geeft argument int: 2.711181567284651022163152645387264499877979483098981972643154009056321337313146100309896500115791621
222 geeft R: 8.532218017132483352097170685056199713906997271113023474748493409664953347456620862443826728418726491e-107
223 geeft cijfer: 2
223 geeft argument int: 2.133544701853953066489457936161793499633938449296945917929462027168964011939438300929689500347374863
223 geeft R: 5.340560759100895363098526454409316863899791328490926475376368205320189896423611238772721655520092764e-108
224 geeft cijfer: 0
224 geeft argument int: 0.4006341055618591994683738084853804989018153478908377537883860815068920358183149027890685010421245905
224 geeft R: 5.340560759100895363098526454409316863899791328490926475376368205320189896423611238772721655520092764e-108
225 geeft cijfer: 1
225 geeft argument int: 1.201902316685577598405121425456141496705446043672513261365158244520676107454944708367205503126373771
225 geeft R: 8.971374584217876876611275435119457375014479183442982380370034335796708087490224951246357872608054231e-109
226 geeft cijfer: 0
226 geeft argument int: 0.6057069500567327952153642763684244901163381310175397840954747335620283223648341251016165093791213142
226 geeft R: 8.971374584217876876611275435119457375014479183442982380370034335796708087490224951246357872608054231e-109
227 geeft cijfer: 1
227 geeft argument int: 1.817120850170198385646092829105273470349014393052619352286424200686084967094502375304849528137363943
227 geeft R: 4.034237583463312792791943311900156123460764283280062116659629033862797990074015236081818018986623852e-109
228 geeft cijfer: 2
228 geeft argument int: 2.451362550510595156938278487315820411047043179157858056859272602058254901283507125914548584412091828
228 geeft R: 7.428129162936034035790552297539552890916210165047819408526921659068579251298754259721247832390035992e-110
229 geeft cijfer: 1
229 geeft argument int: 1.354087651531785470814835461947461233141129537473574170577817806174764703850521377743645753236275483
229 geeft R: 1.942421384319851720435738827295884833634304720422352448848693545808679143058521242871759106144002238e-110
230 geeft cijfer: 1
230 geeft argument int: 1.06226295459535641244450638584238369942338861242072251173345341852429411155156413323093725970882645
230 geeft R: 1.138521247811242819841343372146621478736695722138634622892841747220457736451102372552628640619909862e-111
231 geeft cijfer: 0
231 geeft argument int: 0.1867888637860692373335191575271510982701658372621675352003602555728823346546923996928117791264793497
231 geeft R: 1.138521247811242819841343372146621478736695722138634622892841747220457736451102372552628640619909862e-111
232 geeft cijfer: 0
232 geeft argument int: 0.5603665913582077120005574725814532948104975117865026056010807667186470039640771990784353373794380492
232 geeft R: 1.138521247811242819841343372146621478736695722138634622892841747220457736451102372552628640619909862e-111
233 geeft cijfer: 1
233 geeft argument int: 1.681099774074623136001672417744359884431492535359507816803242300155941011892231597235306012138314148
233 geeft R: 4.612733739080104352296380054498723358623864079873424056486160542254083403720612593613337361450908799e-112
234 geeft cijfer: 2
234 geeft argument int: 2.043299322223869408005017253233079653294477606078523450409726900467823035676694791705918036414942443
234 geeft R: 9.774791305855512155167760985372907279513531886480927485798925562042076319367183900470466495211558548e-114
235 geeft cijfer: 0
235 geeft argument int: 0.129897966671608224015051759699238959883432818235570351229180701403469107030084375117754109244827329
235 geeft R: 9.774791305855512155167760985372907279513531886480927485798925562042076319367183900470466495211558548e-114
236 geeft cijfer: 0
236 geeft argument int: 0.389693900014824672045155279097716879650298454706711053687542104210407321090253125353262327734481987
236 geeft R: 9.774791305855512155167760985372907279513531886480927485798925562042076319367183900470466495211558548e-114
237 geeft cijfer: 1
237 geeft argument int: 1.169081700044474016135465837293150638950895364120133161062626312631221963270759376059786983203445961
237 geeft R: 1.413706442852643209344237939734028972423293440168677890191200957164923281354330651195220760954534078e-114
238 geeft cijfer: 0
238 geeft argument int: 0.5072451001334220484063975118794519168526860923603994831878789378936658898122781281793609496103378826
238 geeft R: 1.413706442852643209344237939734028972423293440168677890191200957164923281354330651195220760954534078e-114
239 geeft cijfer: 1
239 geeft argument int: 1.521735300400266145219192535638355750558058277081198449563636813680997669436834384538082848831013648
239 geeft R: 4.846970136301022153638464902185980494132669461339834906792315566230173882417914012757490127037535816e-115
240 geeft cijfer: 1
240 geeft argument int: 1.565205901200798435657577606915067251674174831243595348690910441042993008310503153614248546493040943
240 geeft R: 1.750272038892552173703826737134544084099247814557520241752417564423820905376116513025917632868267493e-115
241 geeft cijfer: 1
241 geeft argument int: 1.695617703602395306972732820745201755022524493730786046072731323128979024931509460842745639479122829
241 geeft R: 7.180393397563955137256140154507319474214405989634153534057848971550365796955173464487268014785113861e-116
242 geeft cijfer: 2
242 geeft argument int: 2.086853110807185920918198462235605265067573481192358138218193969386937074794528382528236918437368488
242 geeft R: 2.988420699895774040680553432819052296956912190067876117469645230918036257511790206393291388534064787e-117
243 geeft cijfer: 0
243 geeft argument int: 0.2605593324215577627545953867068157952027204435770744146545819081608112243835851475847107553121054632
243 geeft R: 2.988420699895774040680553432819052296956912190067876117469645230918036257511790206393291388534064787e-117
244 geeft cijfer: 0
244 geeft argument int: 0.7816779972646732882637861601204473856081613307312232439637457244824336731507554427541322659363163894
244 geeft R: 2.988420699895774040680553432819052296956912190067876117469645230918036257511790206393291388534064787e-117
245 geeft cijfer: 2
245 geeft argument int: 2.345033991794019864791358480361342156824483992193669731891237173447301019452266328262396797808949168
245 geeft R: 4.396979859793378432034849842170470212092400527984813314285769166741243422510515234866473604112102004e-118
246 geeft cijfer: 1
246 geeft argument int: 1.035101975382059594374075441084026470473451976581009195673711520341903058356798984787190393426847505
246 geeft R: 1.491086699326514362397357611671280858462802992024886708839886430013902304092840966887335572406776943e-119
247 geeft cijfer: 0
247 geeft argument int: 0.105305926146178783122226323252079411420355929743027587021134561025709175070396954361571180280542515
247 geeft R: 1.491086699326514362397357611671280858462802992024886708839886430013902304092840966887335572406776943e-119
248 geeft cijfer: 0
248 geeft argument int: 0.3159177784385363493666789697562382342610677892290827610634036830771275252111908630847135408416275451
248 geeft R: 1.491086699326514362397357611671280858462802992024886708839886430013902304092840966887335572406776943e-119
249 geeft cijfer: 0
249 geeft argument int: 0.9477533353156090481000369092687147027832033676872482831902110492313825756335725892541406225248826353
249 geeft R: 1.491086699326514362397357611671280858462802992024886708839886430013902304092840966887335572406776943e-119
 
Met meer cijfers:

Code:
import mpmath as mp
from mpmath import *

mp.dps = 10000


n = 3 #Voer base (=grondtal) in!


R = 1/(mp.mpf("4.55"))

# print("eerste R is:", R)

for k in range(1,300):
    
    ck = int( ( (mp.mpf(n))**(mp.mpf(k)) ) * mp.mpf(R) )
    
    print(k, "geeft cijfer:", ck)
#    print(k, "geeft argument int:",( (mp.mpf(n))**(mp.mpf(k)) ) * mp.mpf(R) )
#    print(k, "geeft R:",mp.mpf(R) - (mp.mpf(ck)) * ( (mp.mpf(n))**(-mp.mpf(k)) ) )
    
    R = R - (mp.mpf(ck)) * ( (mp.mpf(n))**(-mp.mpf(k)) )



Resultaat:

1 geeft cijfer: 0
2 geeft cijfer: 1
3 geeft cijfer: 2
4 geeft cijfer: 2
5 geeft cijfer: 2
6 geeft cijfer: 1
7 geeft cijfer: 0
8 geeft cijfer: 1
9 geeft cijfer: 2
10 geeft cijfer: 2
11 geeft cijfer: 2
12 geeft cijfer: 1
13 geeft cijfer: 0
14 geeft cijfer: 1
15 geeft cijfer: 2
16 geeft cijfer: 2
17 geeft cijfer: 2
18 geeft cijfer: 1
19 geeft cijfer: 0
20 geeft cijfer: 1
21 geeft cijfer: 2
22 geeft cijfer: 2
23 geeft cijfer: 2
24 geeft cijfer: 1
25 geeft cijfer: 0
26 geeft cijfer: 1
27 geeft cijfer: 2
28 geeft cijfer: 2
29 geeft cijfer: 2
30 geeft cijfer: 1
31 geeft cijfer: 0
32 geeft cijfer: 1
33 geeft cijfer: 2
34 geeft cijfer: 2
35 geeft cijfer: 2
36 geeft cijfer: 1
37 geeft cijfer: 0
38 geeft cijfer: 1
39 geeft cijfer: 2
40 geeft cijfer: 2
41 geeft cijfer: 2
42 geeft cijfer: 1
43 geeft cijfer: 0
44 geeft cijfer: 1
45 geeft cijfer: 2
46 geeft cijfer: 2
47 geeft cijfer: 2
48 geeft cijfer: 1
49 geeft cijfer: 0
50 geeft cijfer: 1
51 geeft cijfer: 2
52 geeft cijfer: 2
53 geeft cijfer: 2
54 geeft cijfer: 1
55 geeft cijfer: 0
56 geeft cijfer: 1
57 geeft cijfer: 2
58 geeft cijfer: 2
59 geeft cijfer: 2
60 geeft cijfer: 1
61 geeft cijfer: 0
62 geeft cijfer: 1
63 geeft cijfer: 2
64 geeft cijfer: 2
65 geeft cijfer: 2
66 geeft cijfer: 1
67 geeft cijfer: 0
68 geeft cijfer: 1
69 geeft cijfer: 2
70 geeft cijfer: 2
71 geeft cijfer: 2
72 geeft cijfer: 1
73 geeft cijfer: 0
74 geeft cijfer: 1
75 geeft cijfer: 2
76 geeft cijfer: 2
77 geeft cijfer: 2
78 geeft cijfer: 1
79 geeft cijfer: 0
80 geeft cijfer: 1
81 geeft cijfer: 2
82 geeft cijfer: 2
83 geeft cijfer: 2
84 geeft cijfer: 1
85 geeft cijfer: 0
86 geeft cijfer: 1
87 geeft cijfer: 2
88 geeft cijfer: 2
89 geeft cijfer: 2
90 geeft cijfer: 1
91 geeft cijfer: 0
92 geeft cijfer: 1
93 geeft cijfer: 2
94 geeft cijfer: 2
95 geeft cijfer: 2
96 geeft cijfer: 1
97 geeft cijfer: 0
98 geeft cijfer: 1
99 geeft cijfer: 2
100 geeft cijfer: 2
101 geeft cijfer: 2
102 geeft cijfer: 1
103 geeft cijfer: 0
104 geeft cijfer: 1
105 geeft cijfer: 2
106 geeft cijfer: 2
107 geeft cijfer: 2
108 geeft cijfer: 1
109 geeft cijfer: 0
110 geeft cijfer: 1
111 geeft cijfer: 2
112 geeft cijfer: 2
113 geeft cijfer: 2
114 geeft cijfer: 1
115 geeft cijfer: 0
116 geeft cijfer: 1
117 geeft cijfer: 2
118 geeft cijfer: 2
119 geeft cijfer: 2
120 geeft cijfer: 1
121 geeft cijfer: 0
122 geeft cijfer: 1
123 geeft cijfer: 2
124 geeft cijfer: 2
125 geeft cijfer: 2
126 geeft cijfer: 1
127 geeft cijfer: 0
128 geeft cijfer: 1
129 geeft cijfer: 2
130 geeft cijfer: 2
131 geeft cijfer: 2
132 geeft cijfer: 1
133 geeft cijfer: 0
134 geeft cijfer: 1
135 geeft cijfer: 2
136 geeft cijfer: 2
137 geeft cijfer: 2
138 geeft cijfer: 1
139 geeft cijfer: 0
140 geeft cijfer: 1
141 geeft cijfer: 2
142 geeft cijfer: 2
143 geeft cijfer: 2
144 geeft cijfer: 1
145 geeft cijfer: 0
146 geeft cijfer: 1
147 geeft cijfer: 2
148 geeft cijfer: 2
149 geeft cijfer: 2
150 geeft cijfer: 1
151 geeft cijfer: 0
152 geeft cijfer: 1
153 geeft cijfer: 2
154 geeft cijfer: 2
155 geeft cijfer: 2
156 geeft cijfer: 1
157 geeft cijfer: 0
158 geeft cijfer: 1
159 geeft cijfer: 2
160 geeft cijfer: 2
161 geeft cijfer: 2
162 geeft cijfer: 1
163 geeft cijfer: 0
164 geeft cijfer: 1
165 geeft cijfer: 2
166 geeft cijfer: 2
167 geeft cijfer: 2
168 geeft cijfer: 1
169 geeft cijfer: 0
170 geeft cijfer: 1
171 geeft cijfer: 2
172 geeft cijfer: 2
173 geeft cijfer: 2
174 geeft cijfer: 1
175 geeft cijfer: 0
176 geeft cijfer: 1
177 geeft cijfer: 2
178 geeft cijfer: 2
179 geeft cijfer: 2
180 geeft cijfer: 1
181 geeft cijfer: 0
182 geeft cijfer: 1
183 geeft cijfer: 2
184 geeft cijfer: 2
185 geeft cijfer: 2
186 geeft cijfer: 1
187 geeft cijfer: 0
188 geeft cijfer: 1
189 geeft cijfer: 2
190 geeft cijfer: 2
191 geeft cijfer: 2
192 geeft cijfer: 1
193 geeft cijfer: 0
194 geeft cijfer: 1
195 geeft cijfer: 2
196 geeft cijfer: 2
197 geeft cijfer: 2
198 geeft cijfer: 1
199 geeft cijfer: 0
200 geeft cijfer: 1
201 geeft cijfer: 2
202 geeft cijfer: 2
203 geeft cijfer: 2
204 geeft cijfer: 1
205 geeft cijfer: 0
206 geeft cijfer: 1
207 geeft cijfer: 2
208 geeft cijfer: 2
209 geeft cijfer: 2
210 geeft cijfer: 1
211 geeft cijfer: 0
212 geeft cijfer: 1
213 geeft cijfer: 2
214 geeft cijfer: 2
215 geeft cijfer: 2
216 geeft cijfer: 1
217 geeft cijfer: 0
218 geeft cijfer: 1
219 geeft cijfer: 2
220 geeft cijfer: 2
221 geeft cijfer: 2
222 geeft cijfer: 1
223 geeft cijfer: 0
224 geeft cijfer: 1
225 geeft cijfer: 2
226 geeft cijfer: 2
227 geeft cijfer: 2
228 geeft cijfer: 1
229 geeft cijfer: 0
230 geeft cijfer: 1
231 geeft cijfer: 2
232 geeft cijfer: 2
233 geeft cijfer: 2
234 geeft cijfer: 1
235 geeft cijfer: 0
236 geeft cijfer: 1
237 geeft cijfer: 2
238 geeft cijfer: 2
239 geeft cijfer: 2
240 geeft cijfer: 1
241 geeft cijfer: 0
242 geeft cijfer: 1
243 geeft cijfer: 2
244 geeft cijfer: 2
245 geeft cijfer: 2
246 geeft cijfer: 1
247 geeft cijfer: 0
248 geeft cijfer: 1
249 geeft cijfer: 2
250 geeft cijfer: 2
251 geeft cijfer: 2
252 geeft cijfer: 1
253 geeft cijfer: 0
254 geeft cijfer: 1
255 geeft cijfer: 2
256 geeft cijfer: 2
257 geeft cijfer: 2
258 geeft cijfer: 1
259 geeft cijfer: 0
260 geeft cijfer: 1
261 geeft cijfer: 2
262 geeft cijfer: 2
263 geeft cijfer: 2
264 geeft cijfer: 1
265 geeft cijfer: 0
266 geeft cijfer: 1
267 geeft cijfer: 2
268 geeft cijfer: 2
269 geeft cijfer: 2
270 geeft cijfer: 1
271 geeft cijfer: 0
272 geeft cijfer: 1
273 geeft cijfer: 2
274 geeft cijfer: 2
275 geeft cijfer: 2
276 geeft cijfer: 1
277 geeft cijfer: 0
278 geeft cijfer: 1
279 geeft cijfer: 2
280 geeft cijfer: 2
281 geeft cijfer: 2
282 geeft cijfer: 1
283 geeft cijfer: 0
284 geeft cijfer: 1
285 geeft cijfer: 2
286 geeft cijfer: 2
287 geeft cijfer: 2
288 geeft cijfer: 1
289 geeft cijfer: 0
290 geeft cijfer: 1
291 geeft cijfer: 2
292 geeft cijfer: 2
293 geeft cijfer: 2
294 geeft cijfer: 1
295 geeft cijfer: 0
296 geeft cijfer: 1
297 geeft cijfer: 2
298 geeft cijfer: 2
299 geeft cijfer: 2
 
Zou toch proberen om dit zelf te programmeren. Kun je gemakkelijk hogere bases proberen, bijvoorbeeld base 65536 voor een bitdiepte van 16 bit en kijken of dat interessant is. En dat je het kunt automatiseren, zodat je heel gemakkelijk reeksen van breuken kunt testen wat het doet.

Code:
import mpmath as mp
from mpmath import *

mp.dps = 10000


n = 65536 #Voer base (=grondtal) in!


R = 1/(mp.mpf("4.55"))

# print("eerste R is:", R)

for k in range(1,300):
    
    ck = int( ( (mp.mpf(n))**(mp.mpf(k)) ) * mp.mpf(R) )
    
    print(k, "geeft cijfer:", ck)
#    print(k, "geeft argument int:",( (mp.mpf(n))**(mp.mpf(k)) ) * mp.mpf(R) )
#    print(k, "geeft R:",mp.mpf(R) - (mp.mpf(ck)) * ( (mp.mpf(n))**(-mp.mpf(k)) ) )
    
    R = R - (mp.mpf(ck)) * ( (mp.mpf(n))**(-mp.mpf(k)) )



1 geeft cijfer: 14403
2 geeft cijfer: 33848
3 geeft cijfer: 17284
4 geeft cijfer: 14403
5 geeft cijfer: 33848
6 geeft cijfer: 17284
7 geeft cijfer: 14403
8 geeft cijfer: 33848
9 geeft cijfer: 17284
10 geeft cijfer: 14403
11 geeft cijfer: 33848
12 geeft cijfer: 17284
13 geeft cijfer: 14403
14 geeft cijfer: 33848
15 geeft cijfer: 17284
16 geeft cijfer: 14403
17 geeft cijfer: 33848
18 geeft cijfer: 17284
19 geeft cijfer: 14403
20 geeft cijfer: 33848
21 geeft cijfer: 17284
22 geeft cijfer: 14403
23 geeft cijfer: 33848
24 geeft cijfer: 17284
25 geeft cijfer: 14403
26 geeft cijfer: 33848
27 geeft cijfer: 17284
28 geeft cijfer: 14403
29 geeft cijfer: 33848
30 geeft cijfer: 17284
31 geeft cijfer: 14403
32 geeft cijfer: 33848
33 geeft cijfer: 17284
34 geeft cijfer: 14403
35 geeft cijfer: 33848
36 geeft cijfer: 17284
37 geeft cijfer: 14403
38 geeft cijfer: 33848
39 geeft cijfer: 17284
40 geeft cijfer: 14403
41 geeft cijfer: 33848
42 geeft cijfer: 17284
43 geeft cijfer: 14403
44 geeft cijfer: 33848
45 geeft cijfer: 17284
46 geeft cijfer: 14403
47 geeft cijfer: 33848
48 geeft cijfer: 17284
49 geeft cijfer: 14403
50 geeft cijfer: 33848
51 geeft cijfer: 17284
52 geeft cijfer: 14403
53 geeft cijfer: 33848
54 geeft cijfer: 17284
55 geeft cijfer: 14403
56 geeft cijfer: 33848
57 geeft cijfer: 17284
58 geeft cijfer: 14403
59 geeft cijfer: 33848
60 geeft cijfer: 17284
61 geeft cijfer: 14403
62 geeft cijfer: 33848
63 geeft cijfer: 17284
64 geeft cijfer: 14403
65 geeft cijfer: 33848
66 geeft cijfer: 17284
67 geeft cijfer: 14403
68 geeft cijfer: 33848
69 geeft cijfer: 17284
70 geeft cijfer: 14403
71 geeft cijfer: 33848
72 geeft cijfer: 17284
73 geeft cijfer: 14403
74 geeft cijfer: 33848
75 geeft cijfer: 17284
76 geeft cijfer: 14403
77 geeft cijfer: 33848
78 geeft cijfer: 17284
79 geeft cijfer: 14403
80 geeft cijfer: 33848
81 geeft cijfer: 17284
82 geeft cijfer: 14403
83 geeft cijfer: 33848
84 geeft cijfer: 17284
85 geeft cijfer: 14403
86 geeft cijfer: 33848
87 geeft cijfer: 17284
88 geeft cijfer: 14403
89 geeft cijfer: 33848
90 geeft cijfer: 17284
91 geeft cijfer: 14403
92 geeft cijfer: 33848
93 geeft cijfer: 17284
94 geeft cijfer: 14403
95 geeft cijfer: 33848
96 geeft cijfer: 17284
97 geeft cijfer: 14403
98 geeft cijfer: 33848
99 geeft cijfer: 17284
100 geeft cijfer: 14403
101 geeft cijfer: 33848
102 geeft cijfer: 17284
103 geeft cijfer: 14403
104 geeft cijfer: 33848
105 geeft cijfer: 17284
106 geeft cijfer: 14403
107 geeft cijfer: 33848
108 geeft cijfer: 17284
109 geeft cijfer: 14403
110 geeft cijfer: 33848
111 geeft cijfer: 17284
112 geeft cijfer: 14403
113 geeft cijfer: 33848
114 geeft cijfer: 17284
115 geeft cijfer: 14403
116 geeft cijfer: 33848
117 geeft cijfer: 17284
118 geeft cijfer: 14403
119 geeft cijfer: 33848
120 geeft cijfer: 17284
121 geeft cijfer: 14403
122 geeft cijfer: 33848
123 geeft cijfer: 17284
124 geeft cijfer: 14403
125 geeft cijfer: 33848
126 geeft cijfer: 17284
127 geeft cijfer: 14403
128 geeft cijfer: 33848
129 geeft cijfer: 17284
130 geeft cijfer: 14403
131 geeft cijfer: 33848
132 geeft cijfer: 17284
133 geeft cijfer: 14403
134 geeft cijfer: 33848
135 geeft cijfer: 17284
136 geeft cijfer: 14403
137 geeft cijfer: 33848
138 geeft cijfer: 17284
139 geeft cijfer: 14403
140 geeft cijfer: 33848
141 geeft cijfer: 17284
142 geeft cijfer: 14403
143 geeft cijfer: 33848
144 geeft cijfer: 17284
145 geeft cijfer: 14403
146 geeft cijfer: 33848
147 geeft cijfer: 17284
148 geeft cijfer: 14403
149 geeft cijfer: 33848
150 geeft cijfer: 17284
151 geeft cijfer: 14403
152 geeft cijfer: 33848
153 geeft cijfer: 17284
154 geeft cijfer: 14403
155 geeft cijfer: 33848
156 geeft cijfer: 17284
157 geeft cijfer: 14403
158 geeft cijfer: 33848
159 geeft cijfer: 17284
160 geeft cijfer: 14403
161 geeft cijfer: 33848
162 geeft cijfer: 17284
163 geeft cijfer: 14403
164 geeft cijfer: 33848
165 geeft cijfer: 17284
166 geeft cijfer: 14403
167 geeft cijfer: 33848
168 geeft cijfer: 17284
169 geeft cijfer: 14403
170 geeft cijfer: 33848
171 geeft cijfer: 17284
172 geeft cijfer: 14403
173 geeft cijfer: 33848
174 geeft cijfer: 17284
175 geeft cijfer: 14403
176 geeft cijfer: 33848
177 geeft cijfer: 17284
178 geeft cijfer: 14403
179 geeft cijfer: 33848
180 geeft cijfer: 17284
181 geeft cijfer: 14403
182 geeft cijfer: 33848
183 geeft cijfer: 17284
184 geeft cijfer: 14403
185 geeft cijfer: 33848
186 geeft cijfer: 17284
187 geeft cijfer: 14403
188 geeft cijfer: 33848
189 geeft cijfer: 17284
190 geeft cijfer: 14403
191 geeft cijfer: 33848
192 geeft cijfer: 17284
193 geeft cijfer: 14403
194 geeft cijfer: 33848
195 geeft cijfer: 17284
196 geeft cijfer: 14403
197 geeft cijfer: 33848
198 geeft cijfer: 17284
199 geeft cijfer: 14403
200 geeft cijfer: 33848
201 geeft cijfer: 17284
202 geeft cijfer: 14403
203 geeft cijfer: 33848
204 geeft cijfer: 17284
205 geeft cijfer: 14403
206 geeft cijfer: 33848
207 geeft cijfer: 17284
208 geeft cijfer: 14403
209 geeft cijfer: 33848
210 geeft cijfer: 17284
211 geeft cijfer: 14403
212 geeft cijfer: 33848
213 geeft cijfer: 17284
214 geeft cijfer: 14403
215 geeft cijfer: 33848
216 geeft cijfer: 17284
217 geeft cijfer: 14403
218 geeft cijfer: 33848
219 geeft cijfer: 17284
220 geeft cijfer: 14403
221 geeft cijfer: 33848
222 geeft cijfer: 17284
223 geeft cijfer: 14403
224 geeft cijfer: 33848
225 geeft cijfer: 17284
226 geeft cijfer: 14403
227 geeft cijfer: 33848
228 geeft cijfer: 17284
229 geeft cijfer: 14403
230 geeft cijfer: 33848
231 geeft cijfer: 17284
232 geeft cijfer: 14403
233 geeft cijfer: 33848
234 geeft cijfer: 17284
235 geeft cijfer: 14403
236 geeft cijfer: 33848
237 geeft cijfer: 17284
238 geeft cijfer: 14403
239 geeft cijfer: 33848
240 geeft cijfer: 17284
241 geeft cijfer: 14403
242 geeft cijfer: 33848
243 geeft cijfer: 17284
244 geeft cijfer: 14403
245 geeft cijfer: 33848
246 geeft cijfer: 17284
247 geeft cijfer: 14403
248 geeft cijfer: 33848
249 geeft cijfer: 17284
250 geeft cijfer: 14403
251 geeft cijfer: 33848
252 geeft cijfer: 17284
253 geeft cijfer: 14403
254 geeft cijfer: 33848
255 geeft cijfer: 17284
256 geeft cijfer: 14403
257 geeft cijfer: 33848
258 geeft cijfer: 17284
259 geeft cijfer: 14403
260 geeft cijfer: 33848
261 geeft cijfer: 17284
262 geeft cijfer: 14403
263 geeft cijfer: 33848
264 geeft cijfer: 17284
265 geeft cijfer: 14403
266 geeft cijfer: 33848
267 geeft cijfer: 17284
268 geeft cijfer: 14403
269 geeft cijfer: 33848
270 geeft cijfer: 17284
271 geeft cijfer: 14403
272 geeft cijfer: 33848
273 geeft cijfer: 17284
274 geeft cijfer: 14403
275 geeft cijfer: 33848
276 geeft cijfer: 17284
277 geeft cijfer: 14403
278 geeft cijfer: 33848
279 geeft cijfer: 17284
280 geeft cijfer: 14403
281 geeft cijfer: 33848
282 geeft cijfer: 17284
283 geeft cijfer: 14403
284 geeft cijfer: 33848
285 geeft cijfer: 17284
286 geeft cijfer: 14403
287 geeft cijfer: 33848
288 geeft cijfer: 17284
289 geeft cijfer: 14403
290 geeft cijfer: 33848
291 geeft cijfer: 17284
292 geeft cijfer: 14403
293 geeft cijfer: 33848
294 geeft cijfer: 17284
295 geeft cijfer: 14403
296 geeft cijfer: 33848
297 geeft cijfer: 17284
298 geeft cijfer: 14403
299 geeft cijfer: 33848
 
Dat lijkt nu goed te gaan met n=3. Weet de periode van n=65536 niet, maar wel een mooie herhaling en geen gekke dingen. :)
 
Ik zal die uitkomst nog even controleren:

[imath] \mathrm{Y} = (0,[14403][33848][17284] \, [14403][33848][17284] \, [14403][33848][17284] \, ...)_{65536} [/imath]

[imath] 65536^3 \cdot \mathrm{Y} = ([14403][33848][17284])_{65536} + \mathrm{Y} [/imath]

[imath] (65536^3 - 1) \cdot \mathrm{Y} = 14403 \cdot 65536^2 + 33848 \cdot 65536^1 + 17284 [/imath]

[imath] \mathrm{Y} = \frac{14403 \cdot 65536^2 + 33848 \cdot 65536^1 + 17284}{65536^3 - 1} [/imath]

[imath] \mathrm{Y} = \frac{100}{455} = \frac{1}{4,55} \,\, [/imath] :geslaagd:
 
Hoe nu verder? Kun je zulke "signalen" direct vanuit Python afspelen?
 
Heel mooi dat het nu toch werkt. :) Wel wat puzzelen om die uitbreiding goed aan de praat te krijgen, was handiger als je de uitgebreide typen gewoon aan het begin van het programma kunt declareren (eventueel met de benodigde instelling) en je daarna er geen omkijken meer naar hebt. Maar goed, als het uiteindelijk maar doet wat het moet doen.
 
Ik vind het verrassend dat de lengte van de periode voor n = 65536 slechts 3 is. Maar dat lijkt geen toeval te zijn, want bij een steekproef voor andere grote n vond ik zojuist veel meer korte perioden van 2, 3 of 4 cijfers. Langer komt ook wel voor maar lijkt zeldzamer. Ik vermoed dan ook dat veel geluiden van de Cage-synth op elkaar zullen lijken. De vraag is dan wat een slimme opzet voor de toetsentoewijzing is... Misschien dan maar niet al te veel toetsen dus slechts 25 waarbij de 15 witte de geluiden voor de 2-tallige tot en met de 16-tallige representaties bevatten en de 10 zwarte toetsen zijn dan gereserveerd voor 10 bijzondere (nog te kiezen) hogere n-tallige representaties?
 
Laatst gewijzigd:
Kennelijk kan dat met 'PyAudio'. Meer hier:


Daar zie ik het volgende voorbeeld:

Code:
# ""PyAudio Example: Play a wave file."""

import pyaudio
import wave
import sys

CHUNK = 1024


# wf = wave.open(sys.argv[1], 'rb') # Original example
wf = your_audio_data_array

# instantiate PyAudio (1)
p = pyaudio.PyAudio()

# open stream (2)
stream = p.open(format=p.get_format_from_width(your_audio_data_samplewidth),
                channels=your_audio_data_nChannels,
                rate=your_audio_data_framerate,
                output=True)

# read data
data = wf # your_audio_data_array
# play stream (3)
while len(data) > 0:
    stream.write(data)
    # data = wf.readframes(CHUNK) # read more data if you want to stream another buffer

# stop stream (4)
stream.stop_stream()
stream.close()

# close PyAudio (5)
p.terminate()
 
Je kunt de tijdsduur van 4'33'' natuurlijk wat ruimer zien. Iets bedenken om op een priemgetal te komen, een conversie naar een andere tijdseenheid. Aantal Planck-tijden ofzo. :D Met een noemer p wat een priemgetal is, dan is de maximale lengte van de repetend p-1, en heb je meer materiaal tot je beschikking met langere perioden.
 
Heb het even met het omgekeerde van een groot priemgetal geprobeerd, en zo krijg je inderdaad veel meer variatie. Maar ik zou dat dan geen Cage-synth meer noemen, maar een priem-synth. Die naam bevrijdt ons gelijk van de noodzaak om daarin op enigerlei wijze de Cage-duur te gebruiken.
 
Code:
from pydub import AudioSegment
from pydub.playback import play

song = AudioSegment.from_wav("sound.wav")
play(song)

Dat werkt maar dan moet je al een wav-bestand hebben...
 
Code:
import pyaudio
import numpy as np
import math
import struct

FS = 44100  #  frames per second, samples per second or sample rate

def play_sound(type, frequency, volume, duration):

   generate_sound(type, frequency, volume, duration)

def generate_sound(type, frequency, volume, duration):

    outbuf = np.random.normal(loc=0, scale=1, size=int(float(duration / 1000.0)*FS))

    if type == "sine":
        dur = int(FS * float(duration / 1000.0))
        theta = 0.0
        incr_theta = frequency * 2 * math.pi / FS # frequency increment normalized for sample rate
        for i in range(dur):
            outbuf[i] = volume * math.sin(theta)
            theta += incr_theta

    p = pyaudio.PyAudio()
    stream = p.open(format=pyaudio.paFloat32, channels=1, rate=FS, output=True)
    data = b''.join(struct.pack('f', samp) for samp in outbuf) # must pack the binary data
    stream.write(data)
    stream.stop_stream()
    stream.close()
    p.terminate()

play_sound("sine", 220, 0.8, 1000)  #  duration in milliseconds

Dit werkt ook en genereert zelf het signaal.
 
Vanaf hier ga ik weer verder met Csound en Cabbage die voor audiobewerking veel geschikter en eenvoudiger dan Python zijn. De met Python gevonden signalen stop ik in arrays die dan met een wavetable oscillator als hieronder kunnen worden afgespeeld (in de plaats van giSin komen de arrays):

Code:
<Cabbage>
</Cabbage>

<CsoundSynthesizer>

<CsOptions>
</CsOptions>

<CsInstruments>
 
ksmps = 32
nchnls = 2
0dbfs = 1

giSin ftgen 0, 0, 2^10, 10, 1, 1

instr 1
  andx phasor 400
  aOut tablei andx, giSin, 1
  outs aOut, aOut
endin

</CsInstruments>

<CsScore>
i 1 0 3
</CsScore>

</CsoundSynthesizer>
 
Hoog tijd voor geluidjes! ;)

Met onderstaand Csound progje kan ik n-tallige signalen (althans waarvan de periode direct na de komma begint) afspelen:

Code:
<CsoundSynthesizer>

<CsOptions>
</CsOptions>

<CsInstruments>

sr = 44100
ksmps = 32
nchnls = 2
0dbfs  = 1

instr 1   
asig poscil .8, 220, 1   
     outs asig, asig
endin

</CsInstruments>


<CsScore>
f 1 0 60 7 2 10 2 0 1 10 1 0 9 10 9 0 7 10 7 0 8 10 8 0 0     
i 1 0 10
e
</CsScore>
</CsoundSynthesizer>

Zo vinden we voor de 10-tallig representatie: 0.219780219780... (na normalisatie) het geluidje:



En dat ziet er in Audacity (na vergroting) zo uit:

audacity.png
 
Nog verzoekjes voor het afspelen van andere reperterende n-tallige representaties?
 
Mooi! :) Kun je 'ns iets laten horen als base 65536 en de fractie van een breuk die duidelijk een wat langere periode heeft?
 
Voor 1/79 wordt de 65536-tallige representatie mogelijk interessant. De periode is dan:

1 geeft cijfer: 829
2 geeft cijfer: 37330
3 geeft cijfer: 41478
4 geeft cijfer: 31523
5 geeft cijfer: 42308
6 geeft cijfer: 3318
7 geeft cijfer: 18250
8 geeft cijfer: 34841
9 geeft cijfer: 60558
10 geeft cijfer: 38160
11 geeft cijfer: 13273
12 geeft cijfer: 7466
13 geeft cijfer: 8295
14 geeft cijfer: 45626
15 geeft cijfer: 21568
16 geeft cijfer: 53092
17 geeft cijfer: 29864
18 geeft cijfer: 33182
19 geeft cijfer: 51433
20 geeft cijfer: 20739
21 geeft cijfer: 15761
22 geeft cijfer: 53922
23 geeft cijfer: 1659
24 geeft cijfer: 9125
25 geeft cijfer: 17420
26 geeft cijfer: 63047
27 geeft cijfer: 19080
28 geeft cijfer: 6636
29 geeft cijfer: 36501
30 geeft cijfer: 4147
31 geeft cijfer: 55581
32 geeft cijfer: 10784
33 geeft cijfer: 26546
34 geeft cijfer: 14932
35 geeft cijfer: 16591
36 geeft cijfer: 25716
37 geeft cijfer: 43137
38 geeft cijfer: 40648
39 geeft cijfer: 59729

Eventjes invoeren... 8)
 
Back
Top