{
  "ad": "geometri-hesap",
  "surum": "1.0.0",
  "deterministik": true,
  "offline": true,
  "birimler": {
    "uzunluk": [
      "mm",
      "cm",
      "m",
      "km",
      "inc",
      "ft"
    ],
    "ic_hesap": "m",
    "cevrim": {
      "mm": 0.001,
      "cm": 0.01,
      "m": 1,
      "km": 1000,
      "inc": 0.0254,
      "ft": 0.3048
    },
    "alan_cikti": [
      "mm2",
      "cm2",
      "m2",
      "km2",
      "donum",
      "hektar",
      "ft2"
    ],
    "hacim_cikti": [
      "cm3",
      "m3",
      "litre",
      "ft3"
    ],
    "donum_m2": 1000,
    "hektar_m2": 10000,
    "m3_litre": 1000
  },
  "sonuc_sozlesmesi": {
    "basarili_yanit": {
      "json_tipi": "object",
      "alanlar": {
        "alan": {
          "json_tipi": "number",
          "birim": "m2",
          "durum": "kosullu",
          "kosul": "Secilen sekil alan sonucu uretiyorsa bulunur."
        },
        "cevre": {
          "json_tipi": "number",
          "birim": "m",
          "durum": "kosullu",
          "kosul": "Secilen sekil icin cevre belirlenebiliyorsa bulunur; belirlenemeyen cevre 0 veya null yapilmaz."
        },
        "hacim": {
          "json_tipi": "number",
          "birim": "m3",
          "durum": "kosullu",
          "kosul": "Secilen sekil hacim sonucu uretiyorsa bulunur."
        },
        "yuzey": {
          "json_tipi": "number",
          "birim": "m2",
          "durum": "kosullu",
          "kosul": "Secilen sekil icin toplam yuzey belirlenebiliyorsa bulunur."
        },
        "yanal": {
          "json_tipi": "number",
          "birim": "m2",
          "durum": "kosullu",
          "kosul": "Secilen sekil yanal alan sonucu uretiyorsa bulunur."
        },
        "yaklasik": {
          "json_tipi": "boolean",
          "birim": "uygulanmaz",
          "durum": "kosullu",
          "kosul": "Yalniz elips cevresinde true olarak bulunur; kesin sonuclarda anahtar uretilmez."
        },
        "ekler": {
          "json_tipi": "object",
          "birim": "Anahtara gore uzunluk m, alan m2, hacim m3 veya aci derece.",
          "durum": "zorunlu",
          "kosul": "Her basarili runtime yanitinda bulunur; ek sonuc yoksa bos object olur."
        },
        "birimler": {
          "json_tipi": "object<string,object<string,number>>",
          "birim": "Alt harita anahtarinda belirtilir.",
          "durum": "zorunlu",
          "kosul": "Her basarili runtime yanitinda bulunur. Mevcut alan, yuzey ve yanal icin alan_cikti; hacim icin hacim_cikti paralel haritasi uretilir. Her donusum yapragi sonlu number olmak zorundadir; null, string, NaN ve Infinity yasaktir."
        },
        "formuller": {
          "json_tipi": "object<string,string>",
          "birim": "Formul metninde SI birimleriyle aciklanir.",
          "durum": "zorunlu",
          "kosul": "Her basarili runtime yanitinda bulunur; her deger gorunur formul ve sayisal yerine koyma stringidir."
        },
        "meta": {
          "json_tipi": "object",
          "birim": "uygulanmaz",
          "durum": "zorunlu",
          "kosul": "Her basarili runtime yanitinda bulunur.",
          "alanlar": {
            "sekilId": {
              "json_tipi": "string",
              "birim": "uygulanmaz",
              "durum": "zorunlu"
            },
            "girdiBirimi": {
              "json_tipi": "string",
              "birim": "uzunluk birimi kodu",
              "durum": "zorunlu"
            },
            "icHesap": {
              "json_tipi": "string",
              "birim": "uygulanmaz",
              "durum": "zorunlu",
              "sabit_deger": "SI: m, m², m³"
            },
            "pi": {
              "json_tipi": "string",
              "birim": "uygulanmaz",
              "durum": "zorunlu",
              "sabit_deger": "Math.PI"
            }
          }
        }
      }
    },
    "paralel_cevrimler": "Sonucta bulunan her alan, yuzey ve yanal icin alan_cikti; her hacim icin hacim_cikti anahtarlari birimler altinda bulunur. Zorunlu donusumlerden biri binary64 ile sonlu number olarak temsil edilemiyorsa basarili yanit yerine SONUC_SONLU_DEGIL doner.",
    "yuvarlama": "Ara hesap yuvarlanmaz. Motor sonlu sonucu Number(x.toPrecision(12)) ile temizler; 0-8 ondalik basamakli TR bicimlendirme yalniz sunum katmaninda yapilir. Temizleme veya donusum null uretecekse basarili yanit kurulmaz."
  },
  "sekiller": [
    {
      "id": "kare",
      "boyut": 2,
      "girdiler": [
        {
          "ad": "a",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        }
      ],
      "cikti": [
        "alan",
        "cevre",
        "ekler.kosegen"
      ],
      "formul": {
        "alan": "a^2",
        "cevre": "4*a",
        "kosegen": "a*sqrt(2)"
      },
      "kisit": "a > 0",
      "ornek": {
        "girdi": {
          "a": 2,
          "birim": "m"
        },
        "cikti": {
          "alan": 4.0000000,
          "cevre": 8.0000000,
          "ekler": {
            "kosegen": 2.8284271
          }
        }
      }
    },
    {
      "id": "dikdortgen",
      "boyut": 2,
      "girdiler": [
        {
          "ad": "a",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        },
        {
          "ad": "b",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        }
      ],
      "cikti": [
        "alan",
        "cevre",
        "ekler.kosegen"
      ],
      "formul": {
        "alan": "a*b",
        "cevre": "2*(a+b)",
        "kosegen": "sqrt(a^2+b^2)"
      },
      "kisit": "a > 0 && b > 0",
      "ornek": {
        "girdi": {
          "a": 3,
          "b": 4,
          "birim": "m"
        },
        "cikti": {
          "alan": 12.0000000,
          "cevre": 14.0000000,
          "ekler": {
            "kosegen": 5.0000000
          }
        }
      }
    },
    {
      "id": "ucgen-taban-yukseklik",
      "boyut": 2,
      "girdiler": [
        {
          "ad": "t",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        },
        {
          "ad": "h",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        }
      ],
      "cikti": [
        "alan"
      ],
      "formul": {
        "alan": "t*h/2"
      },
      "kisit": "t > 0 && h > 0; taban ve yukseklik cevreyi belirlemez",
      "ornek": {
        "girdi": {
          "t": 6,
          "h": 4,
          "birim": "m"
        },
        "cikti": {
          "alan": 12.0000000,
          "ekler": {}
        }
      }
    },
    {
      "id": "ucgen-3kenar",
      "boyut": 2,
      "girdiler": [
        {
          "ad": "a",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        },
        {
          "ad": "b",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        },
        {
          "ad": "c",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        }
      ],
      "cikti": [
        "alan",
        "cevre",
        "ekler.yukseklikler.a",
        "ekler.yukseklikler.b",
        "ekler.yukseklikler.c"
      ],
      "formul": {
        "siralama": "kenarlari a >= b >= c olacak bicimde azalan sirala",
        "gecerlilik": "c > a-b",
        "alan": "0.25*sqrt((a+(b+c))*(c-(a-b))*(c+(a-b))*(a+(b-c)))",
        "cevre": "a+b+c",
        "yukseklikler": "ha=2*alan/a; hb=2*alan/b; hc=2*alan/c"
      },
      "kisit": "Girdi kenarlari pozitiftir; azalan siralamadan sonra strict ucgen esitsizligi toplama kaybina dayanikli c > a-b ile denetlenir. Kahan duzenlemesindeki dort faktor, ara carpimlar, karekok, alan ve cevre sonlu olmalidir.",
      "ornek": {
        "girdi": {
          "a": 3,
          "b": 4,
          "c": 5,
          "birim": "m"
        },
        "cikti": {
          "alan": 6.0000000,
          "cevre": 12.0000000,
          "ekler": {
            "yukseklikler": {
              "a": 4.0000000,
              "b": 3.0000000,
              "c": 2.4000000
            }
          }
        }
      }
    },
    {
      "id": "ucgen-2kenar-aci",
      "boyut": 2,
      "girdiler": [
        {
          "ad": "a",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        },
        {
          "ad": "b",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        },
        {
          "ad": "C",
          "tip": "number",
          "birim": "derece",
          "zorunlu": true
        }
      ],
      "cikti": [
        "alan",
        "cevre",
        "ekler.ucuncuKenar"
      ],
      "formul": {
        "radyan": "C_rad=C*pi/180",
        "alan": "a*b*sin(C_rad)/2",
        "ucuncu_kenar": "sqrt(a^2+b^2-2*a*b*cos(C_rad))",
        "ucuncu_kenar_sayisal": "hypot((a-b)*cos(C_rad/2),(a+b)*sin(C_rad/2))",
        "cevre": "a+b+ucuncu_kenar"
      },
      "kisit": "a > 0 && b > 0 && 0 < C && C < 180; ucuncu kenarin matematiksel kosinus teoremi sqrt(a^2+b^2-2*a*b*cos(C_rad)) bicimi gosterilir, ancak motor a≈b ve kucuk C'te yikici toplama kaybini onlemek icin sayisal olarak hypot((a-b)*cos(C_rad/2),(a+b)*sin(C_rad/2)) kararli ozdesligiyle degerlendirir; ara degerler ve ucuncu kenar sonlu ve pozitif olmalidir",
      "ornek": {
        "girdi": {
          "a": 3,
          "b": 4,
          "C": 90,
          "birim": "m"
        },
        "cikti": {
          "alan": 6.0000000,
          "cevre": 12.0000000,
          "ekler": {
            "ucuncuKenar": 5.0000000
          }
        }
      }
    },
    {
      "id": "paralelkenar",
      "boyut": 2,
      "girdiler": [
        {
          "ad": "t",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        },
        {
          "ad": "h",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        },
        {
          "ad": "yan",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        }
      ],
      "cikti": [
        "alan",
        "cevre"
      ],
      "formul": {
        "alan": "t*h",
        "cevre": "2*(t+yan)"
      },
      "kisit": "t > 0 && h > 0 && yan > 0 && h <= yan; h > yan ise GEOMETRI_TUTARSIZ",
      "ornek": {
        "girdi": {
          "t": 5,
          "h": 3,
          "yan": 4,
          "birim": "m"
        },
        "cikti": {
          "alan": 15.0000000,
          "cevre": 18.0000000,
          "ekler": {}
        }
      }
    },
    {
      "id": "yamuk",
      "boyut": 2,
      "girdiler": [
        {
          "ad": "a",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        },
        {
          "ad": "c",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        },
        {
          "ad": "h",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        },
        {
          "ad": "yan1",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": false,
          "birlikte": "yan2"
        },
        {
          "ad": "yan2",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": false,
          "birlikte": "yan1"
        }
      ],
      "cikti": [
        "alan",
        "cevre"
      ],
      "kosullu_cikti": {
        "cevre": "yan1 ve yan2 birlikte verildiginde bulunur; aksi durumda anahtar uretilmez"
      },
      "formul": {
        "alan": "(a+c)*h/2",
        "cevre": "a+c+yan1+yan2",
        "yatay_izdusumler": "x1=sqrt(yan1^2-h^2); x2=sqrt(yan2^2-h^2)",
        "kurulabilirlik": "d=abs(a-c); d, x1+x2 veya abs(x1-x2) degerlerinden birine olcek duyarli toleransla esit olmalidir"
      },
      "kisit": "a > 0 && c > 0 && h > 0; yan1 ve yan2 ya birlikte bos ya da birlikte pozitif olmalidir. Yanlar bosken yalniz alan hesaplanir. Yanlar verildiginde yan1 >= h ve yan2 >= h olmalidir; d=abs(a-c), x1=sqrt(yan1^2-h^2), x2=sqrt(yan2^2-h^2) icin d degeri x1+x2 veya abs(x1-x2) konfigurasyonlarindan birine tol=64*Number.EPSILON*max(a,c,h,yan1,yan2,d,x1+x2,abs(x1-x2)) ile uymalidir; aksi durumda GEOMETRI_TUTARSIZ.",
      "ornek": {
        "girdi": {
          "a": 5,
          "c": 2,
          "h": 4,
          "yan1": 4,
          "yan2": 5,
          "birim": "m"
        },
        "cikti": {
          "alan": 14.0000000,
          "cevre": 16.0000000,
          "ekler": {}
        }
      }
    },
    {
      "id": "daire",
      "boyut": 2,
      "girdiler": [
        {
          "ad": "r",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        }
      ],
      "cikti": [
        "alan",
        "cevre",
        "ekler.cap"
      ],
      "formul": {
        "alan": "pi*r^2",
        "cevre": "2*pi*r",
        "cap": "2*r"
      },
      "kisit": "r > 0",
      "ornek": {
        "girdi": {
          "r": 5,
          "birim": "m"
        },
        "cikti": {
          "alan": 78.5398163,
          "cevre": 31.4159265,
          "ekler": {
            "cap": 10.0000000
          }
        }
      }
    },
    {
      "id": "daire-dilimi",
      "boyut": 2,
      "girdiler": [
        {
          "ad": "r",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        },
        {
          "ad": "theta",
          "tip": "number",
          "birim": "derece",
          "zorunlu": true
        }
      ],
      "cikti": [
        "alan",
        "cevre",
        "ekler.yay"
      ],
      "formul": {
        "alan": "(theta/360)*pi*r^2",
        "yay": "(theta/360)*2*pi*r",
        "cevre": "theta === 360 ? yay : yay+2*r"
      },
      "kisit": "r > 0 && 0 < theta && theta <= 360; 0 < theta < 360 icin cevre=yay+2*r, theta === 360 icin tam disk cevresi=yay=2*pi*r; theta > 360 gecersizdir",
      "ornek": {
        "girdi": {
          "r": 6,
          "theta": 60,
          "birim": "m"
        },
        "cikti": {
          "alan": 18.8495559,
          "cevre": 18.2831853,
          "ekler": {
            "yay": 6.2831853
          }
        }
      }
    },
    {
      "id": "daire-halkasi",
      "boyut": 2,
      "girdiler": [
        {
          "ad": "R",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        },
        {
          "ad": "r",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        }
      ],
      "cikti": [
        "alan",
        "cevre"
      ],
      "formul": {
        "alan": "pi*(R-r)*(R+r)",
        "cevre": "2*pi*(R+r)"
      },
      "kisit": "R > r > 0; R^2-r^2 farki toplama kaybina dayanikli (R-r)*(R+r) ozdesligiyle degerlendirilir; cevre dis sinir (2*pi*R) ile ic sinirin (2*pi*r) toplami olan 2*pi*(R+r) tum sinir uzunlugudur",
      "ornek": {
        "girdi": {
          "R": 5,
          "r": 3,
          "birim": "m"
        },
        "cikti": {
          "alan": 50.2654825,
          "cevre": 50.2654825,
          "ekler": {}
        }
      }
    },
    {
      "id": "elips",
      "boyut": 2,
      "girdiler": [
        {
          "ad": "a",
          "tip": "number",
          "birim": "uzunluk",
          "anlam": "yari eksen",
          "zorunlu": true
        },
        {
          "ad": "b",
          "tip": "number",
          "birim": "uzunluk",
          "anlam": "yari eksen",
          "zorunlu": true
        }
      ],
      "cikti": [
        "alan",
        "cevre",
        "yaklasik"
      ],
      "formul": {
        "alan": "pi*a*b",
        "h_parametresi": "q=((a-b)/(a+b))^2",
        "cevre": "pi*(a+b)*(1+3*q/(10+sqrt(4-3*q)))",
        "yontem": "Ramanujan II"
      },
      "kisit": "a > 0 && b > 0",
      "ornek": {
        "girdi": {
          "a": 5,
          "b": 3,
          "birim": "m"
        },
        "cikti": {
          "alan": 47.1238898,
          "cevre": 25.5269989,
          "yaklasik": true,
          "ekler": {}
        }
      }
    },
    {
      "id": "duzgun-cokgen",
      "boyut": 2,
      "girdiler": [
        {
          "ad": "n",
          "tip": "integer",
          "birim": "birimsiz",
          "zorunlu": true
        },
        {
          "ad": "a",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        }
      ],
      "cikti": [
        "alan",
        "cevre",
        "ekler.icAci"
      ],
      "formul": {
        "alan": "n*a^2/(4*tan(pi/n))",
        "cevre": "n*a",
        "ic_aci": "(n-2)*180/n"
      },
      "kisit": "a > 0 && n >= 3 && n tamsayi",
      "ornek": {
        "girdi": {
          "n": 6,
          "a": 2,
          "birim": "m"
        },
        "cikti": {
          "alan": 10.3923048,
          "cevre": 12.0000000,
          "ekler": {
            "icAci": 120.0000000
          }
        }
      }
    },
    {
      "id": "kup",
      "boyut": 3,
      "girdiler": [
        {
          "ad": "a",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        }
      ],
      "cikti": [
        "hacim",
        "yuzey",
        "ekler.cisimKosegeni"
      ],
      "formul": {
        "hacim": "a^3",
        "yuzey": "6*a^2",
        "cisim_kosegeni": "a*sqrt(3)"
      },
      "kisit": "a > 0",
      "ornek": {
        "girdi": {
          "a": 2,
          "birim": "m"
        },
        "cikti": {
          "hacim": 8.0000000,
          "yuzey": 24.0000000,
          "ekler": {
            "cisimKosegeni": 3.4641016
          }
        }
      }
    },
    {
      "id": "dikdortgenler-prizmasi",
      "boyut": 3,
      "girdiler": [
        {
          "ad": "a",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        },
        {
          "ad": "b",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        },
        {
          "ad": "c",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        }
      ],
      "cikti": [
        "hacim",
        "yuzey",
        "ekler.cisimKosegeni"
      ],
      "formul": {
        "hacim": "a*b*c",
        "yuzey": "2*(a*b+b*c+c*a)",
        "cisim_kosegeni": "sqrt(a^2+b^2+c^2)"
      },
      "kisit": "a > 0 && b > 0 && c > 0",
      "ornek": {
        "girdi": {
          "a": 3,
          "b": 4,
          "c": 12,
          "birim": "m"
        },
        "cikti": {
          "hacim": 144.0000000,
          "yuzey": 192.0000000,
          "ekler": {
            "cisimKosegeni": 13.0000000
          }
        }
      }
    },
    {
      "id": "silindir",
      "boyut": 3,
      "girdiler": [
        {
          "ad": "r",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        },
        {
          "ad": "h",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        }
      ],
      "cikti": [
        "hacim",
        "yanal",
        "yuzey"
      ],
      "formul": {
        "hacim": "pi*r^2*h",
        "yanal": "2*pi*r*h",
        "yuzey": "2*pi*r*(r+h)"
      },
      "kisit": "r > 0 && h > 0",
      "ornek": {
        "girdi": {
          "r": 2,
          "h": 3,
          "birim": "m"
        },
        "cikti": {
          "hacim": 37.6991118,
          "yanal": 37.6991118,
          "yuzey": 62.8318531,
          "ekler": {}
        }
      }
    },
    {
      "id": "koni",
      "boyut": 3,
      "girdiler": [
        {
          "ad": "r",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        },
        {
          "ad": "h",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        }
      ],
      "cikti": [
        "hacim",
        "yanal",
        "yuzey",
        "ekler.l"
      ],
      "formul": {
        "l": "sqrt(r^2+h^2)",
        "hacim": "pi*r^2*h/3",
        "yanal": "pi*r*l",
        "yuzey": "pi*r*(r+l)"
      },
      "kisit": "r > 0 && h > 0",
      "ornek": {
        "girdi": {
          "r": 3,
          "h": 4,
          "birim": "m"
        },
        "cikti": {
          "hacim": 37.6991118,
          "yanal": 47.1238898,
          "yuzey": 75.3982237,
          "ekler": {
            "l": 5.0000000
          }
        }
      }
    },
    {
      "id": "kesik-koni",
      "boyut": 3,
      "girdiler": [
        {
          "ad": "R",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        },
        {
          "ad": "r",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        },
        {
          "ad": "h",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        }
      ],
      "cikti": [
        "hacim",
        "yanal",
        "yuzey",
        "ekler.l"
      ],
      "formul": {
        "l": "sqrt((R-r)^2+h^2)",
        "hacim": "pi*h*(R^2+R*r+r^2)/3",
        "yanal": "pi*(R+r)*l",
        "yuzey": "yanal+pi*R^2+pi*r^2"
      },
      "kisit": "R > r > 0 && h > 0",
      "ornek": {
        "girdi": {
          "R": 3,
          "r": 1,
          "h": 4,
          "birim": "m"
        },
        "cikti": {
          "hacim": 54.4542727,
          "yanal": 56.1985178,
          "yuzey": 87.6144444,
          "ekler": {
            "l": 4.4721360
          }
        }
      }
    },
    {
      "id": "kure",
      "boyut": 3,
      "girdiler": [
        {
          "ad": "r",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        }
      ],
      "cikti": [
        "hacim",
        "yuzey",
        "ekler.yarimKureHacim",
        "ekler.yarimKureYuzey"
      ],
      "formul": {
        "hacim": "4*pi*r^3/3",
        "yuzey": "4*pi*r^2",
        "yarim_kure_hacim": "hacim/2",
        "yarim_kure_yuzey": "3*pi*r^2"
      },
      "kisit": "r > 0",
      "ornek": {
        "girdi": {
          "r": 1,
          "birim": "m"
        },
        "cikti": {
          "hacim": 4.1887902,
          "yuzey": 12.5663706,
          "ekler": {
            "yarimKureHacim": 2.0943951,
            "yarimKureYuzey": 9.4247780
          }
        }
      }
    },
    {
      "id": "kare-piramit",
      "boyut": 3,
      "girdiler": [
        {
          "ad": "a",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        },
        {
          "ad": "h",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        }
      ],
      "cikti": [
        "hacim",
        "yanal",
        "yuzey",
        "ekler.m"
      ],
      "formul": {
        "m": "sqrt((a/2)^2+h^2)",
        "hacim": "a^2*h/3",
        "yanal": "2*a*m",
        "yuzey": "a^2+2*a*m"
      },
      "kisit": "a > 0 && h > 0",
      "ornek": {
        "girdi": {
          "a": 6,
          "h": 4,
          "birim": "m"
        },
        "cikti": {
          "hacim": 48.0000000,
          "yanal": 60.0000000,
          "yuzey": 96.0000000,
          "ekler": {
            "m": 5.0000000
          }
        }
      }
    },
    {
      "id": "ucgen-prizma",
      "boyut": 3,
      "girdiler": [
        {
          "ad": "tabanModu",
          "tip": "enum",
          "degerler": [
            "ucgen-3kenar",
            "ucgen-taban-yukseklik"
          ],
          "zorunlu": true
        },
        {
          "ad": "a",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu_kosul": "tabanModu == 'ucgen-3kenar'"
        },
        {
          "ad": "b",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu_kosul": "tabanModu == 'ucgen-3kenar'"
        },
        {
          "ad": "c",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu_kosul": "tabanModu == 'ucgen-3kenar'"
        },
        {
          "ad": "t",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu_kosul": "tabanModu == 'ucgen-taban-yukseklik'"
        },
        {
          "ad": "tabanH",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu_kosul": "tabanModu == 'ucgen-taban-yukseklik'"
        },
        {
          "ad": "tabanCevre",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": false,
          "anlam": "Taban-yukseklik modunda toplam yuzey icin opsiyonel taban cevresi",
          "kisit": "tabanModu == 'ucgen-taban-yukseklik' iken verilmisse tabanCevre >= t + 2*hypot(t/2,tabanH)"
        },
        {
          "ad": "prizmaH",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        }
      ],
      "cikti": [
        "hacim",
        "yuzey",
        "ekler.tabanAlan",
        "ekler.tabanCevre"
      ],
      "kosullu_cikti": {
        "yuzey": "ucgen-3kenar modunda veya tabanCevre verildiginde bulunur; aksi durumda anahtar uretilmez",
        "ekler.tabanCevre": "2B taban motoru cevre dondururse veya tabanCevre verilmisse bulunur"
      },
      "formul": {
        "taban": "tabanModu kimligindeki 2B motor sonucu; alan formulu tekrar edilmez",
        "hacim": "tabanAlan*prizmaH",
        "yuzey": "2*tabanAlan+tabanCevre*prizmaH"
      },
      "kisit": "prizmaH > 0; secilen taban modunun zorunlu girdileri pozitif olmalidir; ucgen-3kenar modu sirali fark tabanli strict ucgen esitsizligine uymali. ucgen-taban-yukseklik modunda tabanCevre verilmisse tabanCevre >= t + 2*hypot(t/2,tabanH) olmalidir; aksi durumda GEOMETRI_TUTARSIZ.",
      "ornek": {
        "girdi": {
          "tabanModu": "ucgen-3kenar",
          "a": 3,
          "b": 4,
          "c": 5,
          "prizmaH": 10,
          "birim": "m"
        },
        "cikti": {
          "hacim": 60.0000000,
          "yuzey": 132.0000000,
          "ekler": {
            "tabanAlan": 6.0000000,
            "tabanCevre": 12.0000000
          }
        }
      }
    },
    {
      "id": "ici-bos-silindir",
      "boyut": 3,
      "girdiler": [
        {
          "ad": "R",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        },
        {
          "ad": "r",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        },
        {
          "ad": "h",
          "tip": "number",
          "birim": "uzunluk",
          "zorunlu": true
        }
      ],
      "cikti": [
        "hacim"
      ],
      "formul": {
        "hacim": "pi*h*(R-r)*(R+r)"
      },
      "kisit": "R > r > 0 && h > 0; R^2-r^2 farki toplama kaybina dayanikli (R-r)*(R+r) ozdesligiyle degerlendirilir; kapak ve duvar tanimi verilmedigi icin yuzey uretilmez",
      "ornek": {
        "girdi": {
          "R": 3,
          "r": 1,
          "h": 5,
          "birim": "m"
        },
        "cikti": {
          "hacim": 125.6637061,
          "ekler": {}
        }
      }
    }
  ],
  "yaklasik": [
    {
      "sekil": "elips",
      "alan": "cevre",
      "yontem": "Ramanujan II",
      "formul": "pi*(a+b)*(1+3*q/(10+sqrt(4-3*q))); q=((a-b)/(a+b))^2",
      "not": "Elips cevresinin elementer fonksiyonlarla basit kapali formulu yoktur; bu sonuc yaklasik degerdir."
    }
  ],
  "sayisal_alan": {
    "kayan_nokta": "IEEE 754 binary64 (cift duyarlik); min normal ~2.2e-308, min alt-normal ~5e-324",
    "asgari_girdi": "Pozitif girdilerin karesi (alan) veya kupu (hacim) binary64 alt-normal tabaninin altina duserse sonuc sifira coker. Sozgelimi kare {a:1e-200} icin a^2=1e-400 coker; motor 0 dondurmek yerine fail-closed SONUC_SONLU_DEGIL verir. Kare yuzeyinin alt-taşmamasi icin giris uzunlugu yaklasik olarak |a| >= 1e-162 (cunku (1e-162)^2 ~ 1e-324), kup icin ise |a| >= 1e-108 sinirinda tutulmalidir; bu esiklerin altindaki degerler basariyla 0 uretmez.",
    "tasma": "Pozitif faktorlerin carpimi veya zorunlu paralel donusumlerden herhangi biri binary64 ile sonlu number olarak temsil edilemiyorsa yine SONUC_SONLU_DEGIL doner."
  },
  "hatalar": [
    {
      "kod": "GECERSIZ_SAYI",
      "mesaj": "geçerli bir sayı girin",
      "durum": "Eksik, boş, sayı olmayan veya sonlu olmayan girdi"
    },
    {
      "kod": "OLCU_POZITIF_DEGIL",
      "mesaj": "ölçüler sıfırdan büyük olmalı",
      "durum": "Herhangi bir uzunluk ölçüsü <= 0"
    },
    {
      "kod": "UCGEN_ESITSIZLIGI",
      "mesaj": "bu üç kenar üçgen oluşturmaz",
      "durum": "Kenarlar a >= b >= c sıralandıktan sonra toplama kaybına dayanıklı c > a-b sıkı koşulu sağlanmıyor"
    },
    {
      "kod": "R_KUCUK_ESIT_r",
      "mesaj": "dış yarıçap iç yarıçaptan büyük olmalı",
      "durum": "Daire halkası, kesik koni veya içi boş silindirde R <= r"
    },
    {
      "kod": "ACI_ARALIK_DISI",
      "mesaj": "açı izin verilen aralığın dışında",
      "durum": "Daire diliminde theta (0,360] veya üçgen iç açısında C (0,180) aralığında değil"
    },
    {
      "kod": "COKGEN_KENAR_SAYISI",
      "mesaj": "kenar sayısı 3 veya daha büyük bir tamsayı olmalı",
      "durum": "n < 3 veya n tamsayı değil"
    },
    {
      "kod": "BIRIM_GECERSIZ",
      "mesaj": "geçersiz birim",
      "durum": "birim, birimler.uzunluk listesinde değil"
    },
    {
      "kod": "SEKIL_GECERSIZ",
      "mesaj": "desteklenmeyen şekil",
      "durum": "sekilId, sekiller dizisindeki canonical kimliklerden biri değil"
    },
    {
      "kod": "TABAN_MODU_GECERSIZ",
      "mesaj": "geçersiz üçgen tabanı modu",
      "durum": "tabanModu, ucgen-3kenar veya ucgen-taban-yukseklik değil"
    },
    {
      "kod": "GEOMETRI_TUTARSIZ",
      "mesaj": "ölçüler birbiriyle geometrik olarak tutarsız",
      "durum": "Pozitif ve sonlu ölçüler aynı şekli kuramıyor: paralelkenarda h > yan; yanları verilen yamukta yan < h veya yatay izdüşüm konfigurasyonları taban farkına uymuyor; taban-yükseklik modundaki üçgen prizma çevresi kurulabilir en küçük çevreden kısa"
    },
    {
      "kod": "SONUC_SONLU_DEGIL",
      "mesaj": "sonuç hesaplanamadı",
      "durum": "NaN veya Infinity üretecek büyüklük ya da ara sonuç; pozitif girdiden matematiksel olarak pozitif olması gereken bir kök veya ek sonucun binary64 alt-taşmasıyla sıfıra çökmesi (örneğin kare {a:1e-200} ile a²=1e-400); veya zorunlu paralel birim dönüşümlerinden en az biri sonlu number olarak temsil edilemiyor"
    }
  ]
}
