Jump to content
  • 0

странный результат pow


Simon
 Share

Question

25 answers to this question

Recommended Posts

  • 0

ubuntu 10.04 32bit

68630377364883

Маководам разве не всё равно, что там после третьей цифры? Ведь это портит красоту и обтекаемость, поэтому можно отбросить. Какая уж там расовая верность.

Link to comment
Share on other sites

  • 0
number pow (number base, number exp)

Возвращает base, возведённую в степень exp. Если возможно, эта функция возвращает integer.

В PHP 4.0.6 и ранее pow() всегда возвращает float и не выдаёт предупреждений.

Так что сверяем версии PHP, а не разрядность системы

Когда float, то результат получается: 6.86303773649E+13 = 68630377364900

У кого integer, то всё нормально: 68630377364883

number_format() решает ситуацию:

Echo number_format(pow(3,29), 14, '.', ' ');

Link to comment
Share on other sites

  • 0

Беглый просмотр мануалов навёл меня на мысль о том, что входящие параметры, как и возвращаемый результат не обязательно типа int — может быть и float, в зависимости от того, что передаётся в качестве параметров, а так же величины возвращаемого значения. Теперь немного тестов.

<?php
var_dump(pow(3,29));

Вот такой скриптик. Оба теста происходили ubuntu linux 10.04. x86 выдал мне float(68630377364883) — логинчно, int переполнен, поэтому заюзался float, так как он вмещает больше. На x64 скрипт вывет int(68630377364883) — целое число, возведённое в целую степень, само собой, даёт целое число и адресации хватило. Посему просьба к трудящимся — не поленитесь и выполните у себя этот скрипт и покажите, что он выдаст. Сначала было такое ощущуение, что просто идёт неправильная работа с числами с плавающей точкой, но OSX x64, который стоит у Светланы должен, по идее, тоже возвращать int. Забавная особенность. Посмотрим, что выдадут тесты.

UPD: Кстати, в С результат не влезает в float — только в double.

Link to comment
Share on other sites

  • 0

даа тема стало горячей )

я эт почему задал вопрос? тут прост над было создать скрипт по алгоритму Шанкса...но перед этим были созданы еще 2 алгоритма (модуло и еуклид) вот я не учел то что все это делается с помощью этих алгоритмов...

мне там над было сделать так:

$p = 809; $alfa = 3; $beta  = 525; $m= sqrt($p-1);

по книге :

$alfa^$m % $p = 99.

Если сразу без сторонних алгоритвом все это сделать результат не будет 99...а если не ошибаюсь 240...и все после этого алгоримт не правильно работал...

дальше над было цикл (i, 99^i (mod 809)) 0<= $i <= 28;

получалось что там 99^9 % 809 входил в - (минус) и дальше нули ...

все это решил с модуло

function mod1($x,$ci)
{

$digit = decbin($ci);
$m = 809;
$a = (string)$digit;

$count = mb_strlen($a);
$z1 = 1;
for($i = $count-1, $j = 0; $i >= 0; $i--, $j++) {

$z1 = pow($z1,2)%$m;
if ($a[$j]=="1") {
$z1 = ($z1*$x)%$m;
}
$i = $i;
$a[$j] = $a[$j];
$zc = $z1;
}
Return $zc;
}

Edited by Simon
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy