PHP-də dəyişənlər. Double (həqiqi ədədlər)

Bunlara sürüşən vergüllü ədədlər deyilir. Ədəbiyyatda və praktikada float, double və ya real kimi də təyin edilir. İki yazılma forması var. Adi yazılış forması cəbrdə yazılış forması ilə eynidir məsələn, 597.5267. Eksponensial yazılış forması isə ədədləri mantissin 5.975267 uyğun 102-a hasili kimi göstərməyə imkan verir. Sıfırdan kiçik ədədlər üçün 10-un üstü mənfi olur. Buna uyğun olaraq 0.00031 ədədini 3.1 × 10-4 kimi göstərmək olar. Beləliklə:

597.5267 => 5.975267×102 => 5.975267e+2
0.00031  => 3.1×10-4      => 3.1e-4

Kompüter proqramlarında yuxarı reqistr simvollarından istifadə etmək imkanı yoxdur, ona görə də ×10 ifadəsi e simvolu şəklində yazılır və ondan sonra 10-un üstündəki qüvvət qeyd edilir. Aşağıdakı misalda $a$b dəyişənlərinin qiymətləri tamamilə eynidir:

<?php
  $a = 597.5267;
  $b = 5.975267e+2;
  $a = 0.00031;
  $b = 3.1e-4;
?>

Sürüşən vergüllü ədədlərin aparat səviyyəsində realizasiyasının ona ayrılan baytlardan və mümkün olan diapazonundan asılı olaraq bir neçə modeli var. Proqramlaşdırma dillərinin əvvəlki versiyalarında sürüşən vergüllü ədədlərin modelini açıq şəkildə göstərmək olurdu. Single (S), Extended (E), Double (D) modellərinə uyğun olaraq 4, 10 və 8 bayt ayrılırdı. Belə variantların olması onunla əlaqəlidir ki, əvvəllər prosessorların daxilində bir qurğu kimi soprosessor yox idi. Soprosessor sürüşən vergüllü ədədlərlə əməliyyatlar yerinə yetrimək – onların realizasiyası üçün lazımdır. Yəni prosessor səviyyəsində yalnız tam ədədlərlə əməliyyat etmək mümkün idi, sürüşən vergüllü ədələrlə isə əməliyyatları dilin kompilyatorunun yaradıcıları özləri nəzərə almalı idilər. Müasir dövrdə demək olar ki, belə problem yoxdur və bütün kompüterlər soprosessorla təchiz olunmuş olur. İstisna yalnız RISC-arxitekturalı superkompüterlər ola bilir. Onların sayı isə məhtuddur.

IBM Blue Gene/P superkomputeri
IBM Blue Gene/P superkomputeri

Məsələnin belə olması ona gətirib çıxarıb ki, sürüşən vergüllü ədədlərin realizasiyasi Double modelini realizasiya edən soprosessor tərəfindən müəyyən edilir və bu modelə 8 bayt ayrılır. Beləliklə, Double modeli uyğun olaraq ±2.23×10-308-dən ±1.79×10308-dək olan aralığı əhatə edir.

İcazə verilən diapazondan kənara çıxılarsa rəqəm əvəzinə sonsuzluğu göstərən INF sabiti çap edilir. Belə ədədlərlə istənilən əməllər də INF nəticəsini verir.

<?php
  echo 6.5e203; // 6.5E+203
  echo 1.8e308; // INF
  echo $var - 1.8e308; // INF
?>

PHP-də INF sabitindən başqa NAN sabiti də var. Bu sabit icazə verilməyən rəqəm mənasında işlədilir. Məsələn, növbəti misalda -1-dən kvadrat kök almaq ifadəsi göstərilib:

<?php
  echo sqrt(-1); // NAN
?>

PHP-də kompleks ədədlərlə işləmək nəzərdə tutulmadığından bu misalda o, icazə verilməyən ədəd – NAN nəticəsini qaytaracaq. INF-də olduğu kimi NAN üzərində də ixtiyari əməliyyatlar elə NAN qaytarır.