За последние 24 часа нас посетили 62933 программиста и 1679 роботов. Сейчас ищут 945 программистов ...

Задачка

Тема в разделе "Прочие вопросы по PHP", создана пользователем Amian, 16 мар 2007.

  1. Amian

    Amian Активный пользователь

    С нами с:
    15 мар 2007
    Сообщения:
    189
    Симпатии:
    0
    Вот такая вот вам задачка на понимание одной полезной вещи,oбьясните,почему ответ будет a!=c :

    Код (Text):
    1. $a=0.1;
    2. $b=1.1;
    3. $c=b-1;
    4.    
    5. if($a==$c){
    6. echo "a=c";}
    7. else{
    8. echo "a!=c";}
     
  2. Anonymous

    Anonymous Guest

    PHP:
    1. <?
    2. $a=0.1;
    3. $b=1.1;
    4. $c=bcsub($b,1);
    5. if (bccomp($a,$c)==0){
    6. echo "a=c";}
    7. else{
    8. echo "a!=c";}
    9. ?>
    Вот так надо делать...
    А почему — оставляем на разбор посетителям. ;)
     
  3. Belegnar

    Belegnar Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    299
    Симпатии:
    0
    Такое решение не соответствует условиям задачи. :)
     
  4. Mavir

    Mavir Guest

    А где знак "$"?
     
  5. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    Amian
    потому что 0.1 != -1

    константа b не объявлена.
    Пишите внимательнее.
     
  6. Anonymous

    Anonymous Guest

    Belegnar, мое решение как раз единственно правильное. Читайте мануал.
    vb, 2-ку тебе. Иди читать мануал.
    Вот вам еще примерчик:
    PHP:
    1. <?
    2. if (floor((0.1+0.7)*10)==8) { echo "equal"; } else { echo "not equal"; }
    3. ?>
     
  7. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    не знал что в php есть такой касяк, все таки 0.1 это не 0.049384629238473287428378293748732847233284983274832, не должно быть тут таких траблов.

    Горбунов Олег, +1

    Хехе, ок :)
     
  8. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    А это не косяк PHP. Это особенность работы процессора с числами с плавающей точкой. Можно еще почитать, как число с плавающей точкой хранится - будет понятней причина.
     
  9. Amian

    Amian Активный пользователь

    С нами с:
    15 мар 2007
    Сообщения:
    189
    Симпатии:
    0
    Упс,сорри,пример был написан на С , скосячил немного когда переделывал :)
     
  10. Belegnar

    Belegnar Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    299
    Симпатии:
    0
    Я ж не говорю, что решение неправильное. :) Я говорю, что оно про другое. :)
     
  11. Amian

    Amian Активный пользователь

    С нами с:
    15 мар 2007
    Сообщения:
    189
    Симпатии:
    0
    Belegnar
    Не, Олег решил все правильно и все какраз "про это" :p
     
  12. Belegnar

    Belegnar Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    299
    Симпатии:
    0
    Ну да, я не тормоз - я медленный газ. :)