Mandelbrot kümesi
C++'tan 1,02 kat hızlı120.000 nokta × en çok 200 yineleme · ondalık sayı. Çubuk uzunsa daha hızlı.
Sayısal hesaplama
400 × 300 noktalık ızgarada her nokta en çok 200 kez yinelenir; kümede kalan yineleme sayısı toplanır. Ondalık sayı işlemlerini ve iç içe sıkı döngüleri ölçer.
Bu sayfayı KabaLang ile yazılmış sunucu sundu.
Canlı ölçüm
Mandelbrot kümesi tarayıcınızda, WebAssembly ile koşar: KabaLang, C++, JavaScript ve Python. Ölçüm sayfası bu testi seçili açar; sonuçlar cihazınızda kalır.
120.000 nokta × en çok 200 yineleme · ondalık sayı. Çubuk uzunsa daha hızlı.
| Dil | En iyi | Ortalama | Derleme | İkili boyutu |
|---|---|---|---|---|
| KabaLang | 16,3 ms | 17,0 ms | 644 ms | 982 KB |
| C++ | 16,6 ms | 17,0 ms | 315 ms | 16 KB |
| Python | 421 ms | 430 ms | – | – |
Ne ölçüyor?
Kategori: Sayısal hesaplama. Tam sayı ve ondalık aritmetik, sıkı döngüler, işlev çağrıları. Üç program da aynı algoritmayı aynı adımlarla uygular ve aynı çıktıyı üretmek zorundadır; çıktı tutmazsa ölçüm geçersiz sayılır.
5652434Derleme
kabalang derle program.kbl -o program
./programclang++ -O2 -o program program.cpp
./programpython3 program.py-O 2; program, çalışma zamanıyla
birlikte bağlama anında eniyilenir ve statik bağlanır (tek, bağımlılıksız ikili).-O2; standart kütüphaneye dinamik bağlı.Kaynak
Aşağıdaki dosyalar ölçülen programların kendisidir.
fonksiyon kacis(cx: ondalik, cy: ondalik, sinir: sayi) -> sayi:
zx = 0.0
zy = 0.0
i = 0
iken i < sinir:
x2 = zx * zx
y2 = zy * zy
eger x2 + y2 > 4.0:
don i
zy = 2.0 * zx * zy + cy
zx = x2 - y2 + cx
i = i + 1
don sinir
toplam = 0
y = 0
iken y < 300:
x = 0
iken x < 400:
toplam = toplam + kacis(-2.0 + ondalik(x) * 3.0 / 400.0, -1.2 + ondalik(y) * 2.4 / 300.0, 200)
x = x + 1
y = y + 1
yazdir(toplam)#include <iostream>
int kacis(double cx, double cy, int sinir) {
double zx = 0.0, zy = 0.0;
int i = 0;
while (i < sinir) {
double x2 = zx * zx;
double y2 = zy * zy;
if (x2 + y2 > 4.0) return i;
zy = 2.0 * zx * zy + cy;
zx = x2 - y2 + cx;
i++;
}
return sinir;
}
int main() {
long long toplam = 0;
for (int y = 0; y < 300; ++y) {
for (int x = 0; x < 400; ++x) {
toplam += kacis(-2.0 + (double)x * 3.0 / 400.0, -1.2 + (double)y * 2.4 / 300.0, 200);
}
}
std::cout << toplam << std::endl;
return 0;
}def kacis(cx: float, cy: float, sinir: int) -> int:
zx = 0.0
zy = 0.0
i = 0
while i < sinir:
x2 = zx * zx
y2 = zy * zy
if x2 + y2 > 4.0:
return i
zy = 2.0 * zx * zy + cy
zx = x2 - y2 + cx
i += 1
return sinir
toplam = 0
y = 0
while y < 300:
x = 0
while x < 400:
toplam += kacis(-2.0 + float(x) * 3.0 / 400.0, -1.2 + float(y) * 2.4 / 300.0, 200)
x += 1
y += 1
print(toplam)function kacis(cx, cy, sinir) {
let zx = 0.0, zy = 0.0;
for (let i = 0; i < sinir; i++) {
const x2 = zx * zx, y2 = zy * zy;
if (x2 + y2 > 4.0) return i;
zy = 2.0 * zx * zy + cy;
zx = x2 - y2 + cx;
}
return sinir;
}
export default function program(yaz = console.log) {
let toplam = 0;
for (let y = 0; y < 300; y++) {
for (let x = 0; x < 400; x++) {
toplam += kacis(-2.0 + x * 3.0 / 400.0, -1.2 + y * 2.4 / 300.0, 200);
}
}
yaz(toplam);
}
// `node program.js` ile de koşar (tarayıcıda ölçüm işçisi program()ı çağırır).
if (globalThis.process?.argv?.[1]?.endsWith("program.js")) program();