С Новым годом! Форум программистов, компьютерный форум, киберфорум
Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
5 / 5 / 2
Регистрация: 24.11.2020
Сообщений: 73

Перевод полутора десятков строк с Питона на Free Basic

11.02.2023, 00:26. Показов 6893. Ответов 50
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Хочу в бейсике повторить программу написанную на питоне.
Не уверен, что стоит погружаться в изучение последнего, ради пятнадцати строк.
Приведу ниже всю программу и начну с малого ... надеюсь постепенно, с вашей помощью осилить эту непростую задачу.
Заранее спасибо.

Вот вся программа, ниже будет код, который хочется разобрать первым, иначе я не осилю сразу всей этой информации:

Python
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
sk = 0x28E14A7B6A307F426A94F8114701E7C8E77AE7F9A47E2C2035DB29A20632172D
    # base point (generator)
G = (0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798,
    0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8)
 
    # field prime
P = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
 
    # order
N = (1 << 256) - 0x14551231950B75FC4402DA1732FC9BEBF
 
    # операция сложения на эллиптической кривой
    # обратите внимание, что координаты должны быть заданы по модулю P и что деление равно
    # выполняется путем вычисления мультипликативного обратного, что может быть сделано с
    # x ^-1 = x ^ (P-2) mod P с использованием малой теоремы Ферма (степенная функция
    # python может сделать это эффективно даже для очень большого P)
 
def add(p, q):
        px, py = p
        qx, qy = q
        if p == q:
            lam = (3 * px * px) * pow(2 * py, P - 2, P)
        else:
            lam = (qy - py) * pow(qx - px, P - 2, P)
        rx = lam**2 - px - qx
        ry = lam * (px - rx) - py
        return rx % P, ry % P
 
    # вычислить G * sk с повторным сложением
    # используя двоичное представление sk, это можно сделать в 256
    # итерации (удвоение и добавление)
    
ret = None
 
for i in range(256):
        if sk & (1 << i):
            if ret is None:
                ret = G
            else:
                ret = add(ret, G)
        G = add(G, G)
 
print (ret)
А вот цикл, с которым хочется разобраться в первую очередь:

Python
1
2
3
4
5
6
7
for i in range(256):
        if sk & (1 << i):
            if ret is None:
                ret = G
            else:
                ret = add(ret, G)
        G = add(G, G)
Насколько мне подсказывают практически утерянные знания бейсика из школьной программы, тут написано следующее:

- создаётся цикл на 256 итераций, но не понимаю, почему нет закрывающего оператора NEXT, как и END IF в ниже следующих условиях
- далее условие, если sk &, красным непонятное, что делает этот оператор? 1 << i это как я понял сдвиг влево на i раз, фактически умножение i раз на 2. Т.е. я не понимаю в чем заключается условие.
- далее, как я понял, если в первой итерации, то ret не определён, присваиваем ему G
- после else идем в процедуру, которая тоже вызывает множество вопросов
- далее все ясно

Главный вопрос в этом кусочке кода, тут - if sk & (1 << i), это что, логическое И с 1 << i, не понимаю, какой смысл условия .....
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.02.2023, 00:26
Ответы с готовыми решениями:

Перевод решенной задачи с Free Basic на Turbo Pascal
Доброго времени суток! Есть решенная задача, но вся проблема в том что задача эта решена на языке Basic. Попробовал сам переписать с...

Библиотека для Free Basic, аналог функций Pure Basic
Просматривая форумы FreeBasic'a наткнулся на библиотеку, которая ставит своей целью дублирование функций языка Pure Basic, дублирование...

Перевод из питона
Помогите перевести эту фигню из питона на паскаль, с похожим функционалом. Заранее благодарен. f = open(&quot;testA.txt&quot;,...

50
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
11.02.2023, 09:27
Цитата Сообщение от putman Посмотреть сообщение
1 << i, не понимаю, какой смысл условия
Битовый сдвиг. Смысл условия, что проверяются по очереди биты числа с младшего до старшего.

Добавлено через 2 минуты
Типа если бит равен нулю, то умножение на ноль всё равно дало бы ноль.

Добавлено через 1 минуту
Цитата Сообщение от putman Посмотреть сообщение
далее, как я понял, если в первой итерации, то ret не определён, присваиваем ему G
Да, но это тупо и немного просаживает производительность.

Добавлено через 1 минуту
Цитата Сообщение от putman Посмотреть сообщение
Хочу в бейсике повторить программу написанную на питоне.
Вы уверены, что тузика не порвёт как грелку бейсик выдержит 256-битные числа?
2
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,757
11.02.2023, 09:28
putman, а FreeBasic разве умеет работать с длинными числами?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
11.02.2023, 09:29
С длинными однозначно нет, вопрос в том, если ли тип данных uint256_t.
1
1709 / 578 / 74
Регистрация: 10.04.2009
Сообщений: 9,297
11.02.2023, 09:43
Цитата Сообщение от u235 Посмотреть сообщение
Basic разве умеет работать с длинными числами?
насколько длинными?
Тип Long
Хранение целых чисел от -2 147 483 648 до 2 147 483 647 - ещё больше?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
11.02.2023, 09:52
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
насколько длинными?
да

Python
1
2
3
4
>>> 2 ** 32
4294967296
>>> 2 ** 256
115792089237316195423570985008687907853269984665640564039457584007913129639936
1
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,757
11.02.2023, 09:56
Ципихович Эндрю, а вы код посмотрите и увидете насколько длинными. 256 бит как минимум.
0
5 / 5 / 2
Регистрация: 24.11.2020
Сообщений: 73
11.02.2023, 11:33  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Битовый сдвиг. Смысл условия, что проверяются по очереди биты числа с младшего до старшего.
Типа если бит равен нулю, то умножение на ноль всё равно дало бы ноль.
Спасибо, понял.
Значит мне нужно перевести в двоичную форму своё число и в случае установленного бита произвести умножение.

Вопрос не в тему, по синтаксису питона. Почему у IF, FOR, DEF нет закрывающих операторов и при изменении табуляции, программа перестаёт работать? Тут получается по табуляции подразумевается где какой блок этих операторов?

Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Вы уверены, что тузика не порвёт как грелку бейсик выдержит 256-битные числа?
С гитхаба скачал библиотеку для работы с длинными числами, 256 битное умножает, делит, складывает, вычитает и сравнивает. Даже на 256 битные, а больше. Но, очень медленно, 100 умножений 256 битных чисел заняло секунду, это получается явно больше одной секунды придётся ждать работы программы из первого поста =(
0
1709 / 578 / 74
Регистрация: 10.04.2009
Сообщений: 9,297
11.02.2023, 11:35
Цитата Сообщение от putman Посмотреть сообщение
Почему у IF, FOR, DEF нет закрывающих операторов и при изменении табуляции, программа перестаёт работать? Тут получается по табуляции подразумевается где какой блок этих операторов?
да так и есть
1
16 / 16 / 0
Регистрация: 10.04.2022
Сообщений: 16
01.04.2023, 07:07
Freebasic, умеет работать с большими целыми числами... и очень быстро, благодаря библиотеке big_int. Заголовочные файлы были переведены из Си. https://documentation.help/Fre... igint.html
Python, как ползал, так и будет ползать ... ибо... рождён ползать

Вот результат работы examples/math/big_int/perftest.bas

Кликните здесь для просмотра всего текста

Start of calculating 3000!... 3000! = 4149359603437854085556867093086612170951 11
9194931809917689467657697558565123531950 0860007652178003420075184635383617118495
7508711140459077945534021610683396116210 3790419917752206266339017968280516471969
7495968842457728766097103003726111095340 2411271188331577388153284389297376130211
0631293037440148537872544607961029042949 1049793888120762511625132917004641668962
1175902035751754889806535778689152850937 8246999467469919083209351106836382428706
3522268544339213775150488588104036818809 0992929124971419005089389944047153514731
5453158744150996017426787508746036797411 7072368747277143988920683691618503608198
4597180937844535239585053776110865111623 6314592088610855745087451394530543621371
1898150847192094426374203275029996333784 9440147756714146808242074999147148783596
6972063895467058996017856948026338876711 2871068004950827400717124819476386401369
1935443541203127866014347925499591435301 2065310340662550323102073835150219510314
8673612338739395096551462159349015789949 9440723110044269248381401414554878727380
4585602356158320431794595305583069335124 6890721246151468485308724031267967089113
5489827334753757568993651763964247817334 6251087901574343739892049226709831703393
2107176343983352444576040476565400414414 6994799843545545977993867028394285134131
8891316569531084851352509400614777404700 7331406541794428004436691903685469270857
2717016480115120574524486079687737848036 6065300910981563909129411063371562154090
3800135058671624262333902434166628716521 2285902745688335048979268693697928783768
9484143657386643695507547396488225622218 3380014600761196859217603234808467455216
3304117380043311442259262436905587829149 0797388575878458573982869539030238383726
5882427654306437517757897215045071361801 7300516284244762942274857556278287634987
6719528136891358391882449928474159168313 0334032199946752082914885764345863832313
5452050759559120620672732969513861229946 5860752731788445244986534816416923884488
9061495850934373442889814884427321817131 2725338915345065811438233812058753798086
0508088976175388289625293363375045454916 8600267229591225528854584482686655324313
0113537548124095612376860780077007079395 4184890714946737785440752830787298810391
2945121929864793703451257436445581459757 1408227059863251653529065845711235852702
1193345298110556839880988409498034618507 8025273038736784042169427237980464304250
0450308066370327600163419214428057088024 3085056789210864697745513953911983863616
7190300278146380136932482332771595180596 1930695042378360826205708872092979297974
2940457687733831987744468554429480032174 1056689423710545028870419611915072739000
0316420144742133232938716180295556140046 0286740042288538985465032802842851512229
6028795741801621823236098320971441047012 5330673148961532367887349845539496043970
5035234776621139591451927042212223142699 8692087463520980686224354813376194395131
9428681134865315622281732149764817053818 4615532659618753029647860116087226364044
3922257601926494610916885151013143945574 3983031925571541621514424691223705191490
9786184943615096310993363959456179659339 6851958605338631176324147066842257192394
7425317264795597499932832472798078964707 5305401419409020060971267475318636552540
3212757757853930697530056595208207457499 4718981444537722482078884433351185456015
6885370818289289521830013965437694728641 8776665762815389737340159410543681435437
3461342446920670700827824236455574508825 5667015724275281031714164063141068138433
0924027281318960884813040665226169552825 6371838624649442956888593938467267236941
9947557132054601826342573102911535353272 8808182773021596787088437293412117084511
5806299676972666016636352769599690215021 2210495425956727859318551626844710037443
4620422003535391203738393095420695021486 2073906531909108213443342514978962842361
9857167477384812609744305503625086635472 0730971298084697196537722779893160200560
7250580075124074944481633922143981184927 4828197865517847854774919871413848504229
0383954090570842038137277135667703565041 0817805206950321362335216927405310153409
2176183407881773567464674907161660065323 0438902639786065509005309872435445689315
6013299424071122950154537715210519424455 1279536497121487222219372928915983300174
2397977592530501318837883494884232222507 3188163994389356278171028754325887945588
5774278039071716638125790379814914844552 6885871629931014510733215554773264576035
9161842987083232375688379171350730060267 3829229468708103075194602037643813867710
7333779312582257356435534577162804030480 9257859097472334139329040722398600054482
6929611039364012753953989939742002192526 8928622564959279136369546983247314494094
2974942132087169636628129638461913781146 0921070103301211993426494166644913031089
8493535366401831282683112506578386425906 5371970109072764293305347512973367169294
1504787094924177812153497949944973235844 5130210029720359993576507730563696950539
9908912520048101200905696331443681791942 4796356338910248625077336724939980172345
1627048850149438343735826440053481474957 4213288736484795895538438363782756014333
7779881612685446240649413441611910895265 3326761627660221130879211665924379496534
8380302360642949819855410143115666017395 1853942600867319856458668463544273018002
2292607589767192198367529528365158715521 8876983179990058531215186910377766768836
5429124741982609943453567152941282383761 2115555686210454583810355154404953718470
7263632185327754865018110026213312284298 6092611215957306602393207747674280090946
2674322138805290643067711276964013735906 2510510506235682413176515330307753589751
3456514742416740151747072083910186998999 3279364910892687924739705814152855543965
9542226039190592658256373446764063595258 3896698151198395988660368375304201799032
8185945569412550519066302854869533377682 9846000318080938221300381022143870574611
8130425196191640597045603518312170815165 8647356556540532928411748628957082856792
3000535258463770612805914520355463899321 2787590634962783797587135258861821325226
3577038396202737385324908353680497990085 7015224833034395251973446533429946525652
3609674283455052373973390237426180887179 9283722285366293439240895762913154442106
5736092054818421393658938677155428424772 7510016673435774309363894844456476437718
4073874379471007867151070449554657626281 5661375507307637680806000318442962339778
0823331135978757713698301281757162567168 3287281511937336685789437109097748581222
8681268241223172726811849752078634531074 9533170826015315944025364536552445358795
2034745213429248916644504804355352281977 7219819718690548841768963987827047820661
2692147254861824785962643427919027450345 2994769367997217285165465591799471789067
8856872785744700842897237782347630807409 1951296623834642783965386501732466585019
2144091694630371265581197700774682562035 1983187829135910139978173036351737647067
1438399281029122446084832051898324834885 5131025539721583184931653670732273172995
4317507754756347481273209566554318518795 8697817249172170086576809890832783083824
0437737974455342525688712898855513180967 0124978594542906096273705906599707841727
3842072160557678906056516769456549012038 8165775861939230924362983389549857279874
5233980904998584674848503995091093988342 1042469311361787597861180309610877436276
4990414655167545507613665725914993376114 3402437629102903841358885313125911325448
4922589600718485116939019398543464941548 3782338302531368775990005443722332901462
5681840959988305225215853285998339903365 9541893269668016326589935823466324708032
4020429791357425755498549372896192091650 7946719971214398325815539458351256480108
8988688705688271122262873403577241842480 3231173027338442220604015609242079569493
2049438094024655625303033288241653020380 0604128844438488418912939398597176567021
1501611340121169355535864984802941563238 2794475763150426857342698631165628009321
6457816541041189907839621075860514509152 6528422433647230880469088426412525126584
7291340591951717542911526220022297569869 2795912462096436305705213309921642225843
7651889193630329851223282950806126200573 5655542131835558382893181387959409623037
9277723034442343234156160355859050232447 5274502630869831414125396371754413611897
2691586507167223080834352955784010872360 2734700111878614623318543943105705848377
0474806035004556885020602730222256397630 7389399850249781551826799169941641455403
2990981319050665435815665769152906890818 6204138444091456355291242064901717436430
4734551913759229149532829881518087400767 3348699769532287145079158444870398040573
7673555777873593937891577147956023340708 4563923141701183925552346181197759156733
8595591926527062406373427776021584651103 5368057963320714896942663358570375305829
6766082242084654645585566678892226276199 9026396179263745785165254091875660854385
9661221944248720424960000000000000000000 0000000000000000000000000000000000000000
0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
0000000000000000000000000000000000000000 0000000000000000000000000000000000000000
0000000000000000000000000000000000000000 000000000

Start of calculating 17^3000... 17^3000 = 22221027396741206017268636648221362705
9790453232929396081976936511833132741161 9499280289987188097879401021379682542795
4177447947107232437636675993896655909193 1664167494311832975445297240982644422604
4267403943966785904668543236594010182066 7999030798516863639348228097805066689170
6529167140025361279482961648379788013173 3601318687211319644931684592950192153263
2495848401216455234803441649724626556323 9041423423408589890694159041236236030019
5378019272030779303410710329741210205268 1477963894243268539011457145229692371666
2983602932015135327220666912682637190176 3466193941945274903457973917402049066641
9699925733053462387806503537375998802960 8578807302415686144319744532845208132894
8714685456012895386513439243057359960008 0031591446523111546419866808726134208471
2870075016389114642453643459009108977367 1108705720150538218077447327376053258890
8562493269339100298037998365919012188620 3033870668835600715688903115605189463994
9334700418341131084055829643410679996281 6103994108612665489361481049398263159370
8468053211308856004056521653453163179818 2380765102974153940198742927142188910456
1341573909497640692574757170542127025174 6724407495763700783434215409632153883156
9652193154748921645977655448457731217959 8306042474794379804120295800150878691853
8862882840321191378018683881652189286064 4628678933855232682381103530908034736620
9229196587128802608568894743462930287636 1022925664673099624085565814093011623669
6820741874275543937011152757452626457333 3626188617276937469740430181963304336834
8176893252591368722805398936719981968255 7037126076192238169121395779484744794157
5515095157443926088606500237457651992599 7435123857205700111089236397014510574673
2196011316549929349196788266171902469528 2980300662625347140585691413856011797296
6368432235952203229087405848600200412135 4716066006280962908573490229293978555270
3280294381853118354878892013975681423974 8093717351894792916900015614555537807092
0672204044844008979878909917997571063775 6985887219389452819288155472215611472336
3604000280267282699073799747611501164342 4036985470550671526803080079745483698730
9122902427546723628772657247483088200777 0204272485982893845764292470865442102108
0892340654700317345650657295007175467689 0288002338532654489687195630337265119874
3479689751038873761645761502105108601720 8604847175447875231675894778647365943375
9886064959894638342868170260216974765277 8232360616101546182986685836687390055864
8939547404072397253136854483165604102136 4881698608361283075200488152569220227095
2633534708095519589404987686973958970951 9072660288818389942888007874418503304886
4979787313529743171339204153171757558045 9328922591926769447208704247404721214412
0267369879518110454212580406865760282906 8267104098362984023217372972694441240772
0016313224174844510450095842608213599498 4499323124500138661399446203203827867472
9266704121548506547804117444776248830686 9789334826491336207361596833948310056223
4462192359609770162572935662693479962527 4428380576933179705834677767215214928411
5190341266509052762496969374942617823922 4672041661680223889905727814026968466759
2976499650248212758240010825951733133191 9528410961327980920630443948607539364730
7967823396015148575641353671172884398024 3398571879231875530650184732790386932082
5158625678506660262430820491328849709545 7369367821074951916221597680581597660873
8585288664399236198708256895645708041373 4659984530893172134366647753551216975789
1301008722315192577656138336855196382063 2954363207576823936305640953251075803717
2582719789595813824874886720793278577458 5628774605559137206694094532230186864495
5232308878512615508167934840108778709092 6420913097063580187180883177919634576262
3864526176328211441123081666771420124477 5104870416817283335809901036286864840150
2633708455116560101548724418454160810009 55695768240001

Start of finding nextprime(2^1024)... nextprime(2^1024) = 1797693134862315907729
3051907890247336179769789423065727343008 1157732675805500963132708477322407536021
1201138798713933576587897688144166224928 4743063947412437776789342486548527630221
9601246094119453082952085005768838150682 3424628814739131105408272371633505106845
8629823994724593847971630483535632962422 4137859

Start of calculating 65537^p (mod p), where p = 2^2048... 65537^p (mod p) = 1
p = 2^2048 = 3231700607131100730071487668866995196044 410266971548403213034542752
4655138867890893197201411522913463688717 9609218980194941195591504909210950881523
8644828312063087736730099609175019775038 9652106796057638384067568276792218642619
7561618380943384761704705816458520363050 4288757589154106580860755239912393038552
1914333389668342420684974786564569494856 1760353263220580778056593310261927084603
1415025859286417711672594360371846185735 7598351152301645904403697613233287231227
1256847108202097251571017269313234696785 4258065669793504599726835299863821552516
6389437335543602135433229604645318478604 952148193555853611059596230656

done, waiting for keypress to exit...



Добавлено через 28 минут
Freebasic может и без big_int, естественно.
Вот пример с Rosettacode https://rosettacode.org/wiki/Fibonacci_sequence

PureBasic
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
'Fibonacci extended
'Freebasic version 24  Windows
Dim Shared ADDQmod(0 To 19) As Ubyte
Dim Shared ADDbool(0 To 19) As Ubyte
 
For z As Integer=0 To 19
    ADDQmod(z)=(z Mod 10+48)
    ADDbool(z)=(-(10<=z))
Next z 
 
Function plusINT(NUM1 As String,NUM2 As String) As String
    Dim As Byte flag
    #macro finish()
    three=Ltrim(three,"0")
    If three="" Then Return "0"
    If flag=1 Then Swap NUM2,NUM1
    Return three
    Exit Function
    #endmacro
    var lenf=Len(NUM1)
    var lens=Len(NUM2)
    If lens>lenf Then 
        Swap NUM2,NUM1
        Swap lens,lenf
        flag=1
    End If
    
    var diff=lenf-lens-Sgn(lenf-lens)
    var three="0"+NUM1
    var two=String(lenf-lens,"0")+NUM2
    Dim As Integer n2
    Dim As Ubyte addup,addcarry
    
    addcarry=0
    
    For n2=lenf-1 To diff Step -1 
        addup=two[n2]+NUM1[n2]-96
        three[n2+1]=addQmod(addup+addcarry)
        addcarry=addbool(addup+addcarry)
    Next n2 
    If addcarry=0 Then 
        finish()
    End If
    If n2=-1 Then 
        three[0]=addcarry+48
        finish()
    End If
    
    For n2=n2 To 0 Step -1 
        addup=two[n2]+NUM1[n2]-96
        three[n2+1]=addQmod(addup+addcarry)
        addcarry=addbool(addup+addcarry)
    Next n2
    three[0]=addcarry+48
    finish()
End Function
 
Function  fibonacci(n As Integer) As String
    Dim As String sl,l,term
    sl="0": l="1"
    If n=1 Then Return "0"
    If n=2 Then Return "1"
    n=n-2
    For x As Integer= 1 To n
        term=plusINT(l,sl)
        sl=l
        l=term
    Next x
    Function =term
End Function
 
'==============  EXAMPLE ===============
print "THE SEQUENCE TO 10:"
print
For n As Integer=1 To 10
    Print "term";n;": "; fibonacci(n)
Next n
print
print "Selected Fibonacci number"
print "Fibonacci 500"
print
print fibonacci(500)
Sleep
Результат:

THE SEQUENCE TO 10:

term 1: 0
term 2: 1
term 3: 1
term 4: 2
term 5: 3
term 6: 5
term 7: 8
term 8: 13
term 9: 21
term 10: 34

Selected Fibonacci number
Fibonacci 500

8616829160023845073278831216566478809594 1068326060883324529903470149056115823592
713458328176574447204501
----------
Если переписать на Freebasic со вставками на Ассемблере, чего Pythoh не может в принципе, то можно ещё ускорить....
4
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
01.04.2023, 08:11
Все пацаны, нас опустили. Быстренько забиваем на питон и массово го на бейсик. Переписываем все проекты и посыпаем главу пеплом за так бездарно потраченное время на этот убогий и сверхмедленный язык.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
01.04.2023, 09:18
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Быстренько забиваем на питон и массово го на бейсик
На Fortran!
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
01.04.2023, 09:23
Рыжий Лис, была у меня тут как-то мыслишка чисто по фану поучить ассемблер, благо небольшой опыт под AVR присутствует. Но чето убоялся я...
1
16 / 16 / 0
Регистрация: 10.04.2022
Сообщений: 16
01.04.2023, 09:33
Шутить изволите
Не надо было Freebasic недооценивать.
А на самом деле, оба ЯП под разные задачи.

Вот на Python та же задача с сайта Rosettacode.
Немного поменял...
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
from math import *
 
def analytic_fibonacci(n):
  sqrt_5 = sqrt(5);
  p = (1 + sqrt_5) / 2;
  q = 1/p;
  return int( (p**n + q**n) / sqrt_5 + 0.5 )
 
for i in range(1,20):
  print (analytic_fibonacci(i),end="\n")
  
print (end="\n")
print (analytic_fibonacci(500))
Но дело даже на в скорости... допустим, если надо узнать 10000 число из ряда Фибоначчи? (зачем - это уже другой вопрос)

Python из коробки этого не сможет, т.к. ограничен размером стека.


1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181

Traceback (most recent call last):
...
OverflowError: (34, 'Result too large')
>>>


Freebasic подумает и сможет, т.к. ограничен только оперативной памятью.

Вот результат:

THE SEQUENCE TO 20:

term 1: 0
term 2: 1
term 3: 1
term 4: 2
term 5: 3
term 6: 5
term 7: 8
term 8: 13
term 9: 21
term 10: 34
term 11: 55
term 12: 89
term 13: 144
term 14: 233
term 15: 377
term 16: 610
term 17: 987
term 18: 1597
term 19: 2584
term 20: 4181

Selected Fibonacci number
Fibonacci 100000

2079360823713349807211264898864283682508 7036094015903119682945866528501423455686
6489274560343052265155917573432971901580 1062479426725097317613381017990273803823
1789748346235556483191431591924532394420 0280678103204087244146934628490626683870
8330804825092065449334087873322637758084 7446324873797603734794648258113858631550
4040810172603812029199438923709428526016 4739821355447908182359371542956694514931
2993664846779090437799284773675379284270 6601751346648332663776986420121068913557
9114187277693408080350495679409464829288 0566056364718187662668970758537383352677
4208355741559456585420036347653245410061 2101244678568917149480326240860269309121
1601973938229446636049901531963286159699 0778804277202892355393296718771829156434
1907918652511867885682160089752017107049 9437657067342400871083908811800976259727
4318205395542568694608153559184582533982 3438236043576275982317989611674842426954
5924633204614137992850814352018738480923 5815539889908971514694061316956144977837
2074346137375621868510685682609069633981 5490921253714537241866911604250597353747
8237332681781821985092402269558264160166 9008474981607284358248861318482990538315
0180047844353751554201573833105521980998 1238332532612286898240517778465884610797
9080782836713238479845179401107656905752 2158680378961532160858387223882974380483
9319295412221008003135806885850025988795 6646322142782044849256507310659580883740
1648996423563386109782045634122467872921 8456064091743606356182168838125623216644
4282295253757749271536532113420453068674 2435454505103269768144370118494906390254
9349423589040315098773697224370533831653 6038859511698024592793522590153763492565
4872380877183008301074569444002426436414 7569050945350728047646844921056800247399
1449055590439136921869638709291818924615 7103450387050229300603241611410707453960
0801709282779518347632167052424858208014 2386652663381608292144288309546325908047
1819329201710147828025221385656340207489 7963176632788722076077910344317001127535
5881347888872750382538906682309868335569 5718137867882982111710796422706778536913
1923427333645567279280189539891531060473 7974128079409163942990879665029460353665
1238230626



Но за то на Python быстрей и проще программировать... в принципе, он для этого и создан, для скорости разработки, а не для скорости исполнения кода...
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
01.04.2023, 09:34
Цитата Сообщение от iSmokeJC Посмотреть сообщение
была у меня тут как-то мыслишка чисто по фану поучить ассемблер, благо небольшой опыт под AVR присутствует. Но чето убоялся я...
Я даже купил бумажную копию "Программирование на ассемблере х64. От начального уровня до профессионального использования AVX"

Цитата Сообщение от Old_Demon Посмотреть сообщение
Python из коробки этого не сможет, т.к. ограничен размером стека.
Нефиг использовать рекурсию, где ей не место.
2
Эксперт Python
8840 / 4492 / 1864
Регистрация: 27.03.2020
Сообщений: 7,312
01.04.2023, 09:44
Old_Demon,
Но дело даже на в скорости... допустим, если надо узнать 10000 число из ряда Фибоначчи? (зачем - это уже другой вопрос)

Python из коробки этого не сможет, т.к. ограничен размером стека.

Python
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
from time import time
 
# 1. матрицами
def fibo(n):
    a, b, c = 1, 1, 0  
    for d in bin(n)[3:]:
        a, b, c = (a*a+b*b), ((a+c)*b), (b*b+c*c)
        if d == '1':
            a, b, c = (a+b), a, b
    return a,b,c
 
t=time()
n = 10**6
res = fibo(n)[1]
print(time()-t)
print(res)
 
# 2. числами (рекурсия)
def fibo(n):
    def inner(n):
        if not n:
            return 0, 1
        else:
            a, b = inner(n//2)
            c = a * (2*b - a)
            d = (a**2 + b**2)
            if not n%2:
                return c, d
            else:
                return d, (c + d)
    return inner(n)
 
t=time()
#n = int(input())
n = 10**6
res = fibo(n)[0]
print(time()-t)
print(res)
4
16 / 16 / 0
Регистрация: 10.04.2022
Сообщений: 16
01.04.2023, 09:56
Ладно, развлекайтесь дальше Вижу, задел за живое
1
3 / 3 / 0
Регистрация: 01.01.2021
Сообщений: 24
01.04.2023, 11:09
как я не пытался на питоне сделать копию прги FreeBasic. freebasic всегда был быстрее
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38163 / 21098 / 4306
Регистрация: 12.02.2012
Сообщений: 34,686
Записей в блоге: 14
01.04.2023, 12:15
Цитата Сообщение от Old_Demon Посмотреть сообщение
Python из коробки этого не сможет, т.к. ограничен размером стека.
- почему же?


Python
1
2
3
4
5
6
7
def fib(n):
    c,p=0,1
    for _ in range(n):
        c,p=c+p,c
    return c
    
print(fib(1000))
Кликните здесь для просмотра всего текста

4346655768693745643568852767504062580256 4660517371780402481729089536555417949051 8904038798400792551692959225930803226347 7520968962323987332247116164299644090653 3187938298969649928516003704476137795166 849228875
2
16 / 16 / 0
Регистрация: 10.04.2022
Сообщений: 16
01.04.2023, 13:37
Хорошо. Согласен, что Python из коробки хорош и много чего может, просто и легко, чего не может Freebasic так просто.
Он даже шустрей, потому, что его интерпретатор отлично оптимизирует код, а в Freebasic это придётся делать вручную.
Я не питонист, потому взял кривой код, как пример, думая, что он рабочий...но, от этих ошибок тоже никто не застрахован, программируя на Python...
Фиг его знает, Python проще, но, сам себя скомпилировать не может, как Freebasic, требует интерпретатор, для исполнения своего, кода, а Freebasic компилируется сразу в машинный код... и всё. Если косяки, какие-то, то можно посмотреть на уровне ассемблера всегда... в общем, глупо даже сравнивать... это всё равно, что сравнивать Python и Си.
Зачем автору темы понадобилось переписать прогу с Python на Freebasic, я не в курсе, просто Freebasic, как и Си использует библиотеку big_int для работы с большими целыми числами, если это нужно...да, сложней, но возможно. Это всё равно что с Python переписать на Си (суть та же, только синтаксис немного иной и регистр символов не учитывается в Freebasic). А так, куча библиотек Си, транслированы в Freebasic. Можно вообще использовать функции Си в коде Freebasic, включив заголовочные файлы стандартных для Си библиотек.

PureBasic
1
2
3
4
5
6
7
8
#Include "crt\stdio.bi"
 
Dim i As Integer
 
For i = 1 To 5
        printf(!"Hello World!\n")
Next
sleep
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.04.2023, 13:37
Помогаю со студенческими работами здесь

Перевод с питона в с++
Доброго времени суток,помогите перевести код из питона в с++ for i in (i for i in range(1, 1001) if i % sum(map(int, str(i))) == 0): ...

Перевод из Питона на С++
S = input(&quot;Bвeдитe строку:\n&quot;) s1 = &quot;&quot; for i in range(0,len(s)): if s == &quot;а&quot;: s1 = s1+&quot;б&quot; elif s == &quot;б&quot;: s1 = s1+&quot;а&quot; elif s ==...

Перевод с питона на С++
a= s= f=float (input(&quot;Введите число: &quot;)) l=1 r=8 z=0 x=int(input('Введите число: ')) print (f) while l&lt;r: ...

Перевод из Питона на С++

Перевод из Питона на С++
Постройте структуру, которая работает с базой данных в виде двоичного файла. Ваша СУБД должна иметь следующие возможности: • Просмотр...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru