Математика PHP4 и PHP5

Математика PHP4 и PHP5

Здравствуйте!

Эта функция исчисляет коофициент деления координат, чтобы "погонять" координаты точек в картинку размера $height с начальных коофициентом деления $koof из входящих данных.

PHP:
$dil=0.999; //константа

function FindKoof($val,$koof,$height)
{
   while(ceil($val*$koof)!=$height)
      {
         if ($val>$height)
            {
               $koof=$koof*$dil;
            }
         if ($val<$height)
            {
               $koof=$koof/$dil;
            }
         if (ceil($val*$koof)==$height)
            {
               break;
            }
      }
}

echo FindKoof(245,0.999,250); // FindKoof(макс. значение из БД, начальный коофициент, высота картинки)
Как всегда на локалхосте (PHP 5.16 (module) Apache 2.2 WinXP SP2) всё идеально работает, а на удалённом хосте (Apache 1.3.36 (Unix) PHP 4.4.3) скрипт виснет на этом цикле, логически что ceil($val*$koof)!=$height действительно не равно не будет. Не могу утверждать что это из за ф-ции ceil(), но я думаю что ceil() в PHP4 округляет не так как в PHP5. Звучит действительно бредово, но может я прав?
 

WP

^_^
Фдибаг. Выводи дамп всех переменных через каждую итерацию и справни. Увидишь где врать начинает. А вообще странный алгоритм.
 

hermit_refined

Отшельник
Ещё один.
У вас $dil в функции не определена.

P.S. И по-русски скажите, чего вы здесь хотите сделать. Код совершенно маразматический.
(Пока могу предположить, что вам в сторону log.)
 
Не мог ответить, спал.

Есть данные в БД, которые скриптом переводяться в координаты точек и откладаються на картинке, а потом соединяються линией и получаеться график, но когда разница ($val=$max-$min) больше чем размер самой картинки, запускается функция описаная выше и находит коофициент деления, который будет делить каждое число из БД, чтобы график "влез" в размер картинки. Это была задача.

Я не использую функцию, просто написал её для лучшей наглядности и понимаемости, забыл при этом написать global.

Скрипт идеально работает на PHP5 (локалхост), а вот на PHP 4 (хостинг) скрипт исполняеться бесконечно, а это означает что может ф-ция ceil() округляет не так как на локальном хосте.

Есть ли вероятность того что эта функция действительно исполняеться по разному на разных версиях PHP?
 

hermit_refined

Отшельник
Так а почему нельзя вычислять коэффициент как $val / $height ?

P.S. Вообще же в этом коде два спорных момента - непредсказуемость результата, если шаг окажется больше 1, и сравнение int с float (хотя последнее в данном случае должно работать нормально).
 
WP

Проблема, что это всё не работает на хостинге, а он не мой. Мне уже два дня выставляю притензии, что я "вешаю" их сервер и никак не могу его запустить, а то ЭТИ закрывают мне доступ. На локальном компьютере так и делал (выводил дамп всех переменных с помощью вывода буфера каждую секунду) при разработке и всё сводилось к тому, что максимальное значение делилось на тот коофициент и уменшалось или увиличивалось (в зависимости от значений) и влазило в размер картинки.

Мне даже стыдно, но я не знаю как работает фдебаг. Если есть инфа, то дайте.

Заранее благодарен

-~{}~ 30.10.06 08:42:

hermit_refined

Блин... Мда... Ну я себе нахожу не лёгкие пути :). СТУПИЛ Я - всё что могу сказать :). Простой метод, но НЕТ, я должен найти себе "гиморой на голову". (Это был момент самокритики, а теперь переходим к благодарности). Да я не додумался поделить. Спасибо за подсказку.

Но всё-таки есть разница исполнения функции ceil() на разных версиях PHP или это уже бредовые домыслы в белой гарячке от того что "хостеры сделали 403" :)?

-~{}~ 30.10.06 08:46:

непредсказуемость результата
Согласен. И потому хостеры плачут. :)
Спасибо за помощь.

P.S.: Если я Вам надо чем то помочь, обращайтесь.
P.S.: P.S.: :) Давайте напишем роман "Почему плачут хостеры...?". :)
 
boombick

Но печему же? Я НИКОГДА не делаю дебаг, потому что у меня всё ВСЕГДА работает :). (Это была шутка и надеюсь Вы поняли. Дебаг - знаю, а фдебаг - нет).

-~{}~ 30.10.06 08:50:

и сравнение int с float (хотя последнее в данном случае должно работать нормально)
Вот тут я подумал что вся проблема в том, как округлит ceil() и сразу начал подозревать её.
 
Сверху