1
0
mirror of https://github.com/php/doc-tr.git synced 2026-03-24 07:12:18 +01:00
Files
archived-doc-tr/language/types/float.xml
2024-01-15 16:20:57 +03:00

195 lines
6.2 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: a1e3d629b4f01ee41bd38391cd5c6ae5ee894cb3 Maintainer: nilgun Status: ready -->
<sect1 xml:id="language.types.float" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>float</title>
<para>
Gerçek sayılar (veya kayan noktalı sayılar) şu sözdizimleri ile
belirtilebilir:
</para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
$d = 1_234.567; // PHP 7.4.0 ve sonrası
?>
]]>
</programlisting>
</informalexample>
<para>
Biçimsel olarak PHP 7.4.0 ve sonrasında (öncesinde altçizgilere izin
verilmezdi):
</para>
<informalexample>
<programlisting>
<![CDATA[
LNUM [0-9]+(_[0-9]+)*
DNUM ({LNUM}?"."{LNUM}) | ({LNUM}"."{LNUM}?)
EXPONENT_DNUM (({LNUM} | {DNUM}) [eE][+-]? {LNUM})
]]>
</programlisting>
</informalexample>
<para>
Bir gerçek sayının bellekte kapladığı genişlik platforma göre değişmekteyse
de kabaca 14 hanelik bir hassasiyetle 1.8e308'lik olası bir en büyük değer
(64 bitlik IEEE biçemi) hepsi için sağlanır.
</para>
<warning xml:id="warn.float-precision">
<title>Kayan nokta hassasiyeti</title>
<para>
Kayan noktalı sayılar sınırlı bir hassasiyete sahiptir. Sisteme bağımlı
olmakla birlikte PHP normalde (1.11e-16'lık bir yuvarlamadan dolayı görece
en büyük hatayı verecek olan) IEEE 754 çift hassasiyetli biçimi kullanır.
4 temel işlemden daha karmaşık aritmetik işlemler daha büyük hatalar
verebilir, dolayısıyla işlemler karmaşık hale gelmeye başlayınca hatanın
ıklanması bir önkabul olarak ele alınmalıdır.
</para>
<para>
Ek olarak, <literal>0.1</literal> veya <literal>0.7</literal> gibi 10
tabanında kayan noktalı sayılar olarak tamamiyle gösterilebilen gerçel
sayılar, 2 tabanında kayan noktalı sayılar olarak tamamiyle gösterilemezler.
Bu bakımdan, az da olsa bir kayıp olmaksızın dahili ikil
karşılıklarına dönüştürülemezler. Bunun şöyle bir sonucu olur: örneğin,
<code>floor((0.1+0.7)*10)</code> işlevinden beklendiği gibi
<literal>8</literal> değil, <literal>7</literal> döner; bunun sebebi
dahili gösterimin aslında <literal>7.9999999999999991118...</literal> gibi
bir değer olmasıdır.
</para>
<para>
Bu bakımdan, son ondalık hanesine bakarak sonucun ne olacağına karar
verilemez, bu bakımdan kayan noktalı sayılar arasında asla eşitlik
karşılaştırmaları yapılmaz. Eğer daha yüksek hassasiyet isteniyorsa <link
linkend="ref.bc">keyfi hassasiyetli matematik işlevleri</link> ve <link
linkend="ref.gmp">gmp</link> işlevleri kullanılabilir.
</para>
<para>
"Basit" bir açıklama için
<link xlink:href="&url.floating.point.guide;">kayan noktalı sayılar
kılavuzuna</link> bakınız.
</para>
</warning>
<sect2 xml:id="language.types.float.casting">
<title><code>float</code> türüne dönüşüm</title>
<sect3 xml:id="language.types.float.casting.from-string">
<title>Dizelerden</title>
<simpara>
Dize <link linkend="language.types.numeric-strings">sayısal</link> veya
öncü sayısal ise, karşılık gelen <type>float</type> değere çözümlenir,
aksi takdirde sıfıra (<literal>0</literal>) dönüştürülür.
</simpara>
</sect3>
<sect3 xml:id="language.types.float.casting.from-other">
<title>Diğer türlerden</title>
<para>
Diğer türlerdeki değerler için, dönüşüm, değerin önce <type>int</type>'e
ardından <type>float</type>'a dönüştürülmesiyle gerçekleştirilir.
Daha fazla bilgi için bkz.
<link linkend="language.types.integer.casting"><type>int</type> türüne
dönüşüm</link>.
</para>
<note>
<para>
Belirli türlerin <type>int</type> türüne dönüştürülürken tanımlanmamış
davranışları olup, bu ayrıca <type>float</type> türüne dönüştürülürken de
geçerlidir.
</para>
</note>
</sect3>
</sect2>
<sect2 xml:id="language.types.float.comparison">
<title>Kayan noktalı sayıların karşılaştırılması</title>
<para>
Yukarıdaki uyarıda kısaca değinildiği gibi kayan noktalı sayılar arasında
eşitlik karşılaştırmaları, bunların dahili gösterimlerinden dolayı biraz
sorunludur. Bununla birlikte, bu sınırlamaların aşılmasını ve kayan noktalı
sayılar arasında karşılaştırma yapılmasını sağlayan yollar vardır.
</para>
<para>
Kayan noktalı değerlerin eşitliğini sınamak için yuvarlamadan dolayı ortaya
çıkan göreli hatanın bir üst sınırı kullanılır. Bu değer makine epsilonu
veya yuvarlama birimi olarak bilinir ve hesaplamalardaki kabul edilebilir en
küçük farktır.
</para>
<informalexample>
<simpara>
<varname>$a</varname> ve <varname>$b</varname> 5 haneli hassasiyetle
eşittir.
</simpara>
<programlisting role="php">
<![CDATA[
<?php
$a = 1.23456789;
$b = 1.23456780;
$epsilon = 0.00001;
if(abs($a-$b) < $epsilon) {
echo "doğru";
}
?>
]]>
</programlisting>
</informalexample>
</sect2>
<sect2 xml:id="language.types.float.nan">
<title>NaN</title>
<para>
Bazı sayısal işlemler <constant>NAN</constant> sabiti ile gösterilen bir
değerle sonuçlanabilir. Bu sonuç, kayan noktalı hesaplamalarda
tanımlanamayan veya gösterilemeyen bir değeri gösterir. Bu değerin, kendisi
dahil herhangi bir değerle gevşek ya da sıkı bir karşılaştırması &false;
sonucuna sebep olur.
</para>
<para>
<constant>NAN</constant> farklı değerdeki herhangi bir sayıyı temsil
ettiğinden kendisi dahil fakat &true; hariç, başka bir değerle
karşılaştırılmamalı, bunun yerine değer <function>is_nan</function> ile
sınanmalıdır.
</para>
</sect2>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->