За последние 24 часа нас посетили 24712 программистов и 1713 роботов. Сейчас ищут 1857 программистов ...

1.#INF - WTF?? ))

Тема в разделе "Прочие вопросы по PHP", создана пользователем nucer, 19 апр 2009.

  1. nucer

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

    С нами с:
    19 апр 2009
    Сообщения:
    5
    Симпатии:
    0
    Привет всем!
    Подскажите плис кто знает в чем фишка програмлю на пхп не первый день , но такого ещё не видел!! )
    Есть следующий код:
    Код (Text):
    1. $a = pow( 1 + $L10 - $s , 0.25 );
    2. $b = pow( log10( $pop ) , 0.2 )
    3. $C = $a * b;
    4. print $C;
    видим такую штуку
    при этом, такая ситуация посторяется не всегда, а только в некоторых случаях - видимо от исходных чисел зависит в рандомной зависимости.

    Кто-нибудь сталкивался? Есть идеи как избавится от этой штуки и получить нормальное число? )

    P.S. Поиск юзал - выдает какую то чушь )
     
  2. rebux

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

    С нами с:
    15 ноя 2008
    Сообщения:
    10
    Симпатии:
    0
    Очень похоже, полно синтаксических ошибок.
    Правильный вариант:
    Код (Text):
    1.  
    2. $param1=310;
    3. $param2=10;
    4. $param3=30;
    5. $param4=120;
    6.  
    7. $a=pow($param1+$param2-$param3,0.25);
    8. $b=pow(log10($param4),0.2);
    9. $c=$a*$b;
     
  3. nucer

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

    С нами с:
    19 апр 2009
    Сообщения:
    5
    Симпатии:
    0
    Вась, от того, что ты поменял имена переменных ничего не изменится. Синтаксических ошибок тут нет, код полностью рабочий, НО в некоторых случаях начинает выдавать чушь. Это, конечно, далеко не весь код - полный код постить не буду ибо незачем, ошибко именно в этом месте...
    Есть ещё варианты по делу? )
     
  4. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    INF - Это infinity, т.е. бесконечность:

    PHP:
    1. <?php
    2. echo pow(999999999999999999999999999999999999999999999999999999, 999999999999999999999999999999999999999999);
     
  5. nucer

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

    С нами с:
    19 апр 2009
    Сообщения:
    5
    Симпатии:
    0
    на самом деле решил проблему таким образом:

    Код (Text):
    1. function trimNumber( $num )
    2. {
    3.   return round( 10000 * $num ) / 10000;
    4. }
    5.  
    6. $a = trimNumber( pow( 1 + $L10 - $s , 0.25 ) );
    7. $b1 = trimNumber( log10( $pop ) );
    8. $b = trimNumber( pow( $b1 , 0.2 ) );
    9. $C = $a * b;
    10. print $C;
    ну а насчет появления именно 1.#INF там где его совсем не ждут - это недоработка пхп - по всей видимости, у флоата сдвигается точка не вправо, а влево, вытесняя целую часть (хотя хз реально))
     
  6. ай лолд вери хардли
     
  7. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Но он ведь врёт! Это не бесконечность :) Это можно посчитать :))))))))))
     
  8. kas1e

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

    С нами с:
    6 апр 2009
    Сообщения:
    280
    Симпатии:
    0
    бесконечность конечна, если там где она возникает есть предел :)

    языки программирования не могут считать бесконечность, всем числам в них есть свой предел ;)