разный результат мат. вычислений на разных серверах

  • Автор темы Автор темы young
  • Дата начала Дата начала

young

Новичок
разный результат мат. вычислений на разных серверах

Есть стандартный алгоритм получения значения Google PR, который использует стандартную функцию GoogleCH

Но вот при установке данного скрипта на новый сервер, он перестал работать. Путем тестирования, получилось что функция GoogleCH (исключительно работа с числами, никаких внешних запросов) для заданного одного и того же значения дает разный результат.

Правильный результат: -1287135651 (работает на 3х серверах)

Неправильный результат: 869091565

Версия PHP: 5.latest

Исходник функции стандартен и его можно глянуть например тут
http://www.searchengineengine.com/files/pagerank-code.txt

Внимание вопрос - от чего так может быть? может быть настройки какие, или еще что?
 
Я не спец но понятия имею, дело в том что операции с болшими числами могут зависить от платформы, например в java есть класс с пакета match через который можно именно оперировать с большыми числами - в php в мане есть ограничения на максимальнную длину числа, но я помню у меня тоже была такая проблемма когда php не хватает величины числа - тогда он докидывал к обычному числу шеснацети ричное число так что скорее всего что то в самой фунции.
 
S1:
CPU: Intel(R) Pentium(R) 4 CPU 3.00GHz (2992.52-MHz 686-class CPU)
S2:
CPU: Intel(R) Pentium(R) 4 CPU 3.00GHz (3000.13-MHz 686-class CPU)

сервера практически 1:1

Функция GoogleCH стандартизированно, и работает я думаю на тысячах серверов

-~{}~ 31.01.06 21:22:

Хм, ОС-ка разная
4.11-STABLE FreeBSD
vs
6.0-RC1 FreeBSD

других причин я не вижу :(
 
Локализуй ошибку путем выяснения на каком шаге (действии) результаты отличаются. Тогда можно будет смело поставить диагноз.
 
Не претендую на истину, но [m]language.types.integer[/m] - возможно, integer в одном случае 32 бита, а в другом - 64.
Вообще как-то диковато эти функции выглядят - как будто [m]unpack[/m] в природе не существует.
 
Может я и погорячился но если поэксперементировать с большими числами увидиш что могут быть проблемы если полученное чесло привышает допустимое оно выводится 16 ричном виде а потом если привести его к типу (int) получим результат на который не расчитывали ! и еще до какойто версии php давал ошибку если умножались числа большие но одино с чисел было минусовое! а если числа положительные все было окей, в действительности это проблемма с операциями с большими числами и точностью вичесления - повязанна с различными апаратными потдержками (кажись с процами но не гарантирую ... давно читал)
Короче проще тестировать эту функцию и там где она умножает большие числа для теста вставить var_dump и смотреть что возвращают функции
Вот для примера (смотри в коментах)
PHP:
<?php
$int=999999999;
$int++;
$res=($int*10000000);
var_dump($res);
// выводит float(1.0E+16)
// приведем в нужный вид
var_dump((int)$res);

// выводит int(1874919424)
// А должны были получить: 10000000000000000
?>
 
> и?
Ну и знаковая математика ведёт себя в итоге по разному.
PS: предположение, да и только. Тут в процесс надо вникать :)
 
Чтобы не гадать на кофейной гуще предлогаю расставить [m]var_dump[/m], выполнить скрипт на двух серверах где из функции возвращаются разные значения, и построчно сличить то что выведет [m]var_dump[/m].
 
неужели не помогает var_dump() ?
Потестил на windows php 5.1.2 все окей - конечнный результат работы примера функции!.
Что у тебя ранг различный выдает на примерах ? у меня для google выдала рейтинг 10 для яндекса 6 (и не удивительно :) )
 
да глянул на windows xp php 5.1.2 выдает коректную работу
int(177392)
int(-1588438959)
Значит делай вывод ---- переставь php поставь другую версию и пробуй !
 
PHP 4.4.2 (cli) (built: Feb 1 2006 15:18:25)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies
with Zend Extension Manager v1.0.8, Copyright (c) 2003-2005, by Zend Technologies
with Zend Optimizer v2.5.10, Copyright (c) 1998-2005, by Zend Technologies
 
Сверху