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

young

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

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

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

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

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

Версия PHP: 5.latest

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

Внимание вопрос - от чего так может быть? может быть настройки какие, или еще что?
 

texrdcom

Новичок
Я не спец но понятия имею, дело в том что операции с болшими числами могут зависить от платформы, например в java есть класс с пакета match через который можно именно оперировать с большыми числами - в php в мане есть ограничения на максимальнную длину числа, но я помню у меня тоже была такая проблемма когда php не хватает величины числа - тогда он докидывал к обычному числу шеснацети ричное число так что скорее всего что то в самой фунции.
 

young

Новичок
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

других причин я не вижу :(
 

white phoenix

Новичок
Локализуй ошибку путем выяснения на каком шаге (действии) результаты отличаются. Тогда можно будет смело поставить диагноз.
 

SiMM

Новичок
Не претендую на истину, но [m]language.types.integer[/m] - возможно, integer в одном случае 32 бита, а в другом - 64.
Вообще как-то диковато эти функции выглядят - как будто [m]unpack[/m] в природе не существует.
 

texrdcom

Новичок
Может я и погорячился но если поэксперементировать с большими числами увидиш что могут быть проблемы если полученное чесло привышает допустимое оно выводится 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
?>
 

SiMM

Новичок
> и?
Ну и знаковая математика ведёт себя в итоге по разному.
PS: предположение, да и только. Тут в процесс надо вникать :)
 

white phoenix

Новичок
Чтобы не гадать на кофейной гуще предлогаю расставить [m]var_dump[/m], выполнить скрипт на двух серверах где из функции возвращаются разные значения, и построчно сличить то что выведет [m]var_dump[/m].
 

young

Новичок
пока что пересобираю world на 6.0-RC1 FreeBSD
вдруг поможет :)
 

texrdcom

Новичок
неужели не помогает var_dump() ?
Потестил на windows php 5.1.2 все окей - конечнный результат работы примера функции!.
Что у тебя ранг различный выдает на примерах ? у меня для google выдала рейтинг 10 для яндекса 6 (и не удивительно :) )
 

texrdcom

Новичок
да глянул на windows xp php 5.1.2 выдает коректную работу
int(177392)
int(-1588438959)
Значит делай вывод ---- переставь php поставь другую версию и пробуй !
 

Shadowcaster

Новичок
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
 
Сверху