Açıık kaynak olan iki 3D çizim programını denemekte fayda var. Birçok hobi işlemizi çözeceğini düşünüyorum.


Uzun süredir yapay zekâ platformlarından destek alarak geliştirdiğim temel bir BASIC yorumlayıcısı üzerinde çalışıyorum. Bu yorumlayıcıya yaZeka adını verdim.
yaZeka yalnızca BASIC komutlarını çalıştıran bir sistem değil; aynı zamanda trigonometrik işlemleri destekleyen, parantezli matematiksel ifadeleri doğru şekilde çözebilen bir hesap makinesi gibi de çalışıyor. Bu yönüyle hem klasik BASIC mantığını hem de gelişmiş matematiksel ifade işleme yeteneğini bir araya getiren bir yapı ortaya çıkmış oldu.
Projeyi denemek, incelemek ve geliştirmek isteyenler için Wokwi bağlantısını da aşağıda paylaşıyorum:
Wokwi bağlantısı:
https://wokwi.com/projects/444984063919244289
yaZeka’nın en dikkat çekici özelliklerinden biri, matematiksel ifadeleri infix biçiminden postfix biçimine dönüştürerek hesaplayabilmesi. Bu sayede işlem önceliği, parantez yapısı ve fonksiyon kullanımı doğru biçimde yorumlanabiliyor.
Örneğin aşağıdaki ifadeyi doğrudan komut kutusuna yazarsanız, program sonucu anında hesaplayacaktır:
((sinh(10)*cos(pi/4)^e)/log(e*pi))/(pi^3)
İfadeyi yazmadan önce prec 15 komutunu girerseniz, hesaplama sonucunun virgülden sonra kaç anlamlı basamakla gösterileceğini belirleyebilirsiniz. Bu örnekte görmeniz gereken sonuç şu şekildedir:
148.650408170443483
İsterseniz bu sonucu farklı bir hesap makinesiyle de kontrol edebilirsiniz.
yaZeka ile matematiksel ifadeleri değişkenlere atamak da mümkün. Bu sayede yorumlayıcı yalnızca anlık hesaplamalar yapmak için değil, aynı zamanda daha düzenli ve programlama mantığına yakın kullanım için de uygun hâle geliyor.
Örneğin:
x=cos(pi/3)+sin(pi/5)
Bu tür bir kullanım, matematiksel işlemleri daha esnek ve tekrar kullanılabilir hâle getiriyor.
Sistem klasik BASIC tarzında küçük programlar yazmaya da imkân veriyor. Örneğin aşağıdaki program, e sayısını yaklaşık olarak hesaplamak için kullanılabilir:
10 FOR I=1 TO 1000
20 R=(1+1/I)^I
30 NEXT I
40 PRINT R
Bu örnek, yorumlayıcının yalnızca tek satırlık işlemler için değil; döngü, değişken ve çıktı mantığı içeren BASIC programları için de kullanılabildiğini gösteriyor.
Aslında bu projeye yaklaşık üç yıl önce, ChatGPT’nin ilk çıktığı dönemlerde başlamıştım. O günden bugüne bu programı geliştirmeye devam ediyorum. Bu süreçte farklı yapay zekâ platformlarından yararlanarak projeyi adım adım bugünkü hâline getirdim.
Çalışmalarımın bir kısmını ChatGPT’de başlattım, daha sonra AI Studio’da devam ettirdim. Ortaya çıkan programı Claude’a vererek daha detaylı bir geliştirme yaklaşımı oluşturmaya çalıştım. Sonrasında bazı hataları düzeltmek için tekrar farklı araçlardan destek aldım. En son aşamada da hatalı sürümü Cursor ile yeniden işleyerek şu anki duruma ulaştırdım.
Bu üç yıllık süreç benim için yalnızca bir yazılım geliştirme deneyimi olmadı. Aynı zamanda yapay zekâların kod yazma, hata ayıklama ve proje geliştirme becerilerinin zaman içinde nasıl ilerlediğini birebir gözlemlediğim çok öğretici bir süreç oldu.
yaZeka yorumlayıcısı, Arduino ve ESP32 tabanlı donanımlar üzerinde çalışabilecek şekilde geliştirilmiştir. Bununla birlikte, sahip olduğu esnek yapı sayesinde istenildiğinde farklı işlemci mimarilerine de uyarlanabilir. Bu yönüyle yalnızca belirli bir donanımla sınırlı kalmayan, farklı gömülü sistem projelerine adapte edilebilecek bir altyapı sunmaktadır.
Şu anda bu yapının üzerine çok daha gelişmiş yeni bir BASIC yorumlayıcısı geliştiriyorum. Yeni sürümün hem daha hızlı çalışmasını hem de gömülü sistemler üzerinde daha verimli kullanılabilmesini hedefliyorum.
Yeni sürümde yalnızca performans artışı hedeflemiyorum. Aynı zamanda, retro bilgisayarların BASIC komut setlerinden faydalı olabilecek komutları da yaZeka’ya eklemeyi planlıyorum. Hatta bu yeni yapı; C, PureBasic ve Liberty BASIC gibi dillerden de esinlenecek. Böylece gömülü sistemler üzerinde çalışabilecek, daha kapsamlı, daha esnek ve daha güçlü bir BASIC ortamı oluşturmayı amaçlıyorum.
Ayrıca yeni yorumlayıcının daha fazla komut desteklemesi, daha yüksek performans sunması ve daha esnek bir mimariye sahip olması için çalışmalarımı sürdürüyorum.
Geliştirme sürecinin büyük bölümünü Claude üzerinde yürütüyorum. Hedefim, mevcut yapının çok daha güçlü, daha hızlı ve daha yetenekli bir sürümünü ortaya çıkarmak.
yaZeka, uzun süredir emek verdiğim ve gelişimini heyecanla sürdürdüğüm bir proje. Hem BASIC yorumlayıcısı hem de matematiksel ifade çözücüsü olarak çalışabilmesi, bu projeyi benim için oldukça özel bir noktaya taşıyor.
Bu proje benim için yalnızca teknik bir çalışma değil; aynı zamanda yapay zekâ destekli yazılım geliştirmenin yıllar içinde nasıl değiştiğini ve olgunlaştığını gözlemlediğim kişisel bir deneyim de oldu.
Denemek, incelemek ya da fikir vermek isteyenler için proje bağlantısını tekrar bırakıyorum:
Wokwi:
https://wokwi.com/projects/444984063919244289
Görüş, öneri ve katkılara her zaman açığım.
Bailey-Borwein-Plouffe (BBP) formülü
Bailey-Borwein-Plouffe (BBP) formülü, önceki haneleri hesaplamadan pi’nin (veya herhangi bir tabanda diğer sayıların) n’inci onaltılık hanesini hesaplamak için kullanılan bir formüldür. Formül, Simon Plouffe tarafından 1995 yılında keşfedilmiş olup, Peter Borwein ve Simon Plouffe’nin daha önceki çalışmalarına dayanmaktadır ve ayrıca David Bailey, Peter Borwein ve Simon Plouffe tarafından bağımsız olarak bulunmuştur.
Continue reading π Sayısını Hesaplama AlgoritmalarıLambert W fonksiyonu (aynı zamanda omega fonksiyonu olarak da bilinir), matematikte özellikle karmaşık analiz ve ilgili alanlarda kullanılan özel bir fonksiyondur. Fonksiyon, f(z) = z * e^z fonksiyonunun tersidir, yani w(z) fonksiyonu, w(z) * e^w(z) = z denklemini sağlayan fonksiyondur. W(z) olarak gösterilir.
Lambert W fonksiyonu, matematik, bilim ve mühendislik gibi çeşitli alanlarda kullanılır. Örneğin, x^a = b veya a^x = b gibi üstel denklemlerin çözümünde kullanılabilir. Ayrıca, istatistik mekaniği, termodinamik ve finansta da kullanılır.
Lambert W fonksiyonu, karmaşık değerli bir fonksiyondur ve sonsuz sayıda dalga sahiptir. Lambert W fonksiyonunun ana dalı, -1/e’den büyük veya eşit olan gerçek argümanlar için gerçek değerleri alır ve z > -1/e için tek bir değerli ters fonksiyona sahiptir. Diğer dallar karmaşık değerlidir ve ana dalın 2πi katları eklenerek elde edilir.
Lambert W fonksiyonu, MATLAB, Mathematica, Python ve R gibi birçok matematiksel yazılım paketinde ve programlama dilinde uygulanmıştır.
LambertW fonsiyonunun Amstrad CPC makinelerde de çalışabilecek BASiC dilinde yazılmış bir versiyonunu alta ki programda görebilirsiniz
10 INPUT X 20 W = X 30 WHILE ABS(W*EXP(W)-X)/X > 1E-8 40 W = W - (W*EXP(W)-X)/(EXP(W)*(W+1)-((W+2)*(W*EXP(W)-X))/((2*W+2)+W*EXP(W))) 50 WEND 60 PRINT W
Programı kendinizde şu linkte test edebilrisiniz https://benchmarko.github.io/CPCBasic/index.html

WolframAlpha da elde edilen sonuç ise

LambertW fonsiyonu aynı zamanda product log olarkata bilinir ve wolframalpha buadlandırmayı kullanıyor.
Sonuçları karşılaştıracak olursak BASİC ile yazılan program gayet iyi yakınsadıpını söyleyebiliriz
Programda şu değişiklikleri lgili satırda yaparsak
30 WHILE ABS(W*EXP(W)-X)/X > 1E-15
W(x)=1.04990889496404 noktadan sonra 14 basamak doğruğunda sonuç elde ederiz.
Dikkat edilmesi gereken husun x ler daima x>0 büyük olmalıdır. LambertW complex sayılar içinde tanımlı olsa da yazmış olduğumuz program sadece pozitif reel sayıların LambertW sunu hesaplayabilmektedir.
Örnek Porblem:

Şimdi W(ln(3)) programımıza hesaplatalım

Amstrad’da

ifadesini hesaplatalım

Görüldüğü üzere
W(log(3))=0.6018292835875305
x=1.82545502292483

Sonuçtan da anlaşılacağı gibi AMSTRAD CPC464 için yazılan LambertW Basic porgramı sıfırdan büyük pozitif reel sayılar gayet düzgün çalışıyor ve doğru sonuç veriyor.
Örnekteki problemi çözen tam programın listesini aşağıda veriyorum
10 'INPUT X 20 x=LOG(3) 30 W=0 40 WHILE ABS(W*EXP(W)-X)/X>1E-15 50 W=W-(W*EXP(W)-X)/(EXP(W)*(W+1)-(W+2)*(W*EXP(W)-X)/(2*W+2+W*EXP(W))) 60 WEND 70 PRINT "W(x)="W 80 x=LOG(3)/W 90 PRINT 100 PRINT "x=log(3)/W(log(3))=";x 110 PRINT 120 PRINT "x^x=";x^x
Programı linkini https://benchmarko.github.io/CPCBasic/index.html online olan Amstrad simülatöründe deneyebilirsiniz
Bir sonraki macerada görüşmek üzere: C, Octave, Basic dillerinde LambertW fonksiyonuChatGPT ye Arduino için yazdırdığım programı Amstrad Basic diline chatGPT ye çevrttim ancak bir hata yaptı onuda düzelttim satır 160 INT eklnmesi gerekiyordu. Ayıca sonucu daha düzgün görmek için satır 240-270 ekledim. Alta programı görebilrsiniz
10 MODE 2:CLS 20 REM Define the number of digits required to store the result 30 DIM result(40) 40 FOR i=1 TO 40 50 result(i)=0 60 NEXT i 70 REM Set the first digit to 1 80 result(1)=1 90 REM Calculate 2^128 iteratively 100 FOR i=1 TO 128 110 carry=0 120 REM Multiply each digit of the result by 2 and add the carry from the previous digit 130 FOR j=1 TO 40 140 product=2*result(j)+carry 150 result(j)=product MOD 10 160 carry=INT(product/10) 170 NEXT j 180 NEXT i 190 REM Print the result 200 PRINT "2^128 = "; 210 FOR i=40 TO 1 STEP -1 220 PRINT result(i); 230 NEXT i 240 FOR i=40 TO 1 STEP -1 250 res$=res$+MID$(STR$(result(i)),2) 260 NEXT i 270 PRINT res$
Sonucuda Amtrad mükemmel şekilde hesapladı.

// Define the number of digits required to store the result
#define NUM_DIGITS 40
void setup() {
Serial.begin(9600);
// Define the array to store the result
int result[NUM_DIGITS] = {0};
// Set the first digit to 1
result[0] = 1;
// Calculate 2^128 iteratively
for (int i = 0; i < 128; i++) {
int carry = 0;
// Multiply each digit of the result by 2 and add the carry from the previous digit
for (int j = 0; j = 0; i--) {
Serial.print(result[i]);
}
}
void loop() {
// Nothing to do here
}
Wowki


ChatGPT ile olan diyaloğumuz altaki resimde görülüyor

BU chatGPT ye aklıma gelen işkence vari arduino kodları yazdırmak bir takıntı haline geldi bazen uğraştırıyor bazen ne dediğini anlamıyor bazen sabrımı taşırıyor. Daha önceleri de yaptığım denemelerde epey hatalı kodlar üretiyordu. ChatGPT ye olabildiğince net talimatla rvermek gerekiyor ve doğru sonuç verme olasılığı artmış olur.
Bugün tekrar Arduino için 100! (faktoryel) kodunu yazmasın istedim.
Chat kutusuna “write a code for arduino calculating 100! without using bigINT library”
ve chatGPT’ nin yazdığı kod;
void setup() {
Serial.begin(9600); // Start serial communication
}
void loop() {
int result[200]; // Array to store the digits of the factorial
int n = 100; // Calculate the factorial of 100
int length = 1; // Current length of the factorial
// Initialize the array with 1 digit
result[0] = 1;
// Multiply the factorial by each number from 2 to n
for (int i = 2; i <= n; i++) {
int carry = 0; // Carry from the previous multiplication
// Multiply each digit of the factorial by i and add the carry
for (int j = 0; j = 0; i--) {
Serial.print(result[i]);
}
Serial.println();
while(1); // Stop the program
}
Bu programı wowki de, siz de bu altaki linkte deneybilirsiniz
https://wokwi.com/projects/361886801962539009
Ben çalıştırdım ve sonuç
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
Sonucu Full Precision Calculator ‘ da teyyit ettim sonuç mükemmel.

chatGPT gitgide kendini geliştiriyor. Daha zorlu kodlara geçme zamanı geldi. Yeni denemelere devam edeceğim takipte kalın.
void setup() {
Serial.begin(9600);
}
void loop() {
long dividend = 12345;
long divisor = 123456;
int decimal_places = 1000;
char result[decimal_places+2]; // +2 for decimal point and null terminator
memset(result, 0, sizeof(result)); // initialize result to all zeroes
// Handle negative values
bool negative = false;
if ((dividend 0) || (dividend > 0 && divisor < 0)) {
negative = true;
}
dividend = abs(dividend);
divisor = abs(divisor);
// Calculate integer part of quotient
long quotient = dividend / divisor;
ltoa(quotient, result, 10);
// Add decimal point
strcat(result, ".");
// Calculate decimal part of quotient
long remainder = dividend % divisor;
for (int i = 0; i < decimal_places; i++) {
remainder *= 10;
quotient = remainder / divisor;
remainder = remainder % divisor;
result[i+2] = quotient + '0';
}
// Print result
if (negative) {
Serial.print("-");
}
Serial.println(result);
while (1) {} // stop program from continuing indefinitely
}
ChatGPT ilk aktif olduğunda üye olup kullanmışlığım vardı. sadece iki sorudan oluşan bir muhabbet. Biri Aşkın tanımı nedir diğeri de Steve Jobs’ un Biyografisi hakkındaydı. Daha sonraları sistemin yoğunluğundan dolayı giriş yapamadım ve çok fazla deneme fırsatım olmadı hatta neler yapılabileceği konusunda da çok fikrim yoktu. Yine dedim bir zamanlar çok fonksiyonel olmayan yapay zeka ile Chat yazılımlarına benziyordur diye çok üstüne düşmedim. Son bir kaç haftadır youtube de sıkça videolar görmeye başladım. Merakımı tekrar celbetti. Hadi ChapGPT Arduino için bana bir yazılım yazmasını istedim . Blog da daha önce Amstrad bilgisayar için BASIC’ te yazılan bir programı ChatGPT’ nin Arduino için yazmasını istedim.
Çok büyük sayılar çarpımını yapabilecek bir Arduino programını yazması için chat kutusuna yazmaya başladım.
Continue reading ChaGPT kullanarak arduino ya program yazdırdım
You must be logged in to post a comment.