Czemu pi(); nie równa się sobie?

Cześć, mój kolega spytał się czemu jego skrypt w php z wykorzystaniem PHP się nie równa:

Wyechował pi(); i chciał porównać to tym prostym skrypcikiem:

<?php= pi();$pi == '3.14159265359'){'xxx';

Bo pi tyle się nie równa… Nie wiem czy ma tu znaczenie to, że porównanie jest do formatu tekstowego a nie numerycznego i nie wiem też jak PHP się zachowuje w przypadku liczby pi bo jest to liczba niewymierna. Jeżeli chcecie robić takie porównania to musicie zaokrąglać je do któregoś miejsca po przecinku.

Może dlatego że @pi to pi o większej ilości miejsc po przecinku jest większe od tego z mniejsza ilością :stuck_out_tongue: np. mamy 3,14 i 3,141 to te drugie jest większe

Wszerad dobrze radzi. Ograniczyć pi do iluś tam cyfr po przecinku

Przeczytaj ostrzeżenie („Floating point precision”):

http://www.php.net/manual/en/language.types.float.php

A ponadto:

http://pl.wikipedia.org/wiki/IEEE_754

albo: :slight_smile:

<?php

    $pi = pi();

    if($pi =='3.141592653589793'){

    echo 'xxx';

    }

    else {

    echo 'O_O';

    }

    echo $pi;

    ?>

a nawet:

<?php

    $pi = pi();

    if($pi =='3.141592653589793099999999999999....'){

    echo 'xxx';

    }

    else {

    echo 'O_O';

    }

    echo $pi;

    ?>

(Na szesnastym miejscu po przecinku musi być cyfra<3)

A jak zrobić żeby wyświetlić całe PI w php?

PS. Spokojnie mam silne serwery, nie zamuli tak łatwo, jeden serwer ma 8GB RAM :wink:

Nie da się wyświetlić “całego” PI: http://pl.wikipedia.org/wiki/Pi#Niewymi … zby_.CF.80 .

A jak wyświetlić PI do 1000 miejsc po przecinku?

Proszę bardzo. Nie podaję algorytmu bo dosyć złożony i nie w php. Mój komputerek liczył to 0,1 sekundy. Przybliżenie liczby pi z 10000 cyfr po przecinku było liczone 46 sekund. Podobno przy wyznaczaniu trasy w lotach kosmicznych bierze się przybliżenie liczby pi właśnie z dokładnością do 1000 cyfr po przecinku.

3,14 15 92 65 35 89 79 32 38 46 26 43 38 32 79 50 28 84 19 71 69 39 93 75 10 58 20 97 49 44 59 23 07 81 64 06 28 62 08 99 86 28 03 48 25 34 21 17 06 79 82 14 80 86 51 32 82 30 66 47 09 38 44 60 95 50 58 22 31 72 53 59 40 81 28 48 11 17 45 02 84 10 27 01 93 85 21 10 55 59 64 46 22 94 89 54 93 03 81 96 44 28 81 09 75 66 59 33 44 61 28 47 56 48 23 37 86 78 31 65 27 12 01 90 91 45 64 85 66 92 34 60 34 86 10 45 43 26 64 82 13 39 36 07 26 02 49 14 12 73 72 45 87 00 66 06 31 55 88 17 48 81 52 09 20 96 28 29 25 40 91 71 53 64 36 78 92 59 03 60 01 13 30 53 05 48 82 04 66 52 13 84 14 69 51 94 15 11 60 94 33 05 72 70 36 57 59 59 19 53 09 21 86 11 73 81 93 26 11 79 31 05 11 85 48 07 44 62 37 99 62 74 95 67 35 18 85 75 27 24 89 12 27 93 81 83 01 19 49 12 98 33 67 33 62 44 06 56 64 30 86 02 13 94 94 63 95 22 47 37 19 07 02 17 98 60 94 37 02 77 05 39 21 71 76 29 31 76 75 23 84 67 48 18 46 76 69 40 51 32 00 05 68 12 71 45 26 35 60 82 77 85 77 13 42 75 77 89 60 91 73 63 71 78 72 14 68 44 09 01 22 49 53 43 01 46 54 95 85 37 10 50 79 22 79 68 92 58 92 35 42 01 99 56 11 21 29 02 19 60 86 40 34 41 81 59 81 36 29 77 47 71 30 99 60 51 87 07 21 13 49 99 99 98 37 29 78 04 99 51 05 97 31 73 28 16 09 63 18 59 50 24 45 94 55 34 69 08 30 26 42 52 23 08 25 33 44 68 50 35 26 19 31 18 81 71 01 00 03 13 78 38 75 28 86 58 75 33 20 83 81 42 06 17 17 76 69 14 73 03 59 82 53 49 04 28 75 54 68 73 11 59 56 28 63 88 23 53 78 75 93 75 19 57 78 18 57 78 05 32 17 12 26 80 66 13 00 19 27 87 66 11 19 59 09 21 64 20 19 89