Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод больших чисел 
:(
    Опции темы
chiffa
Дата 10.3.2010, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: -1
Всего: -1



Добрый день. После определенного ряда вычислений получаю довольно длинное число, которое выводится как: 1.0542197938321E-081

Подскажите как его можно вывести полностью?....
PM MAIL   Вверх
ksnk
Дата 10.3.2010, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



полностью его скорее всего не вывести. Если поинтересоваться способом хранения вещественных чисе в момпьютере, то можно обнаружить, что число хранится в виде мантиссы - обычного целого числа и порядка - еще одного целого. нормальное число получается когда маттиссу умножают на 2 в степени "порядок", с некоторыми непринципиальными выкрутасами. Так что всех значащих цифр числа компьютер просто не хранит ;)
для любителей точных вычислений можно порекомендовать модуль bcmath - он работает с числами как со строками и может оперировать числами со значительно бОльшим количеством знаков.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
chiffa
Дата 10.3.2010, 12:12 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: -1
Всего: -1



спасибо за ответ! а можно ли как то полученое 1.0542197938321E-081 перевести в строку (с полным количеством цифр)?

PM MAIL   Вверх
Avrely
Дата 10.3.2010, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 239
Регистрация: 15.3.2007

Репутация: нет
Всего: 2



http://www.icosaedro.it/bignumbers/BigInt.htm  smile 



BigINT может отобразить все число 

Это сообщение отредактировал(а) Avrely - 10.3.2010, 12:15
PM MAIL ICQ MSN   Вверх
Fortop
Дата 10.3.2010, 12:21 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(chiffa @  10.3.2010,  11:12 Найти цитируемый пост)
а можно ли как то полученое 1.0542197938321E-081 перевести в строку (с полным количеством цифр)?

Мда, 2003й год однако...

http://php.net/sprintf
http://php.net/number_format


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
chiffa
Дата 10.3.2010, 13:11 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: -1
Всего: -1



Avrely, пасиба! то что нужно!

Единственный вопрос: не подскажешь как там провести деление? 

Код

$s = new BigInt("8");
  echo $s->div_rem(8,2);
 

ругается Fatal error: Cannot pass parameter 2 by reference in
PM MAIL   Вверх
Fortop
Дата 10.3.2010, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Бог ты мой... Вас дружно забанили на php.net?

http://php.net/bcmath
http://php.net/gmp



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
chiffa
Дата 12.3.2010, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: -1
Всего: -1



Fortop, гм... признаю свою вину, меру, степень, глубину... (с)

Но возник небольшой вопрос, возможно даже не так из программирования, как из математики....

Допустим я использую 

Код

$to_barss=bcdiv('58745412554152541256636121255615', '1234567890'); 



результат получаю - 47583784601875998294946

при выполнении 
Код

$mul=bcmul("$to_barss", "1234567890");


результат отличается от исходного - 58745412554152541256635080883940

то что было  58745412554152541256636121255615
то что стало 58745412554152541256635080883940

насколько я понимаю разница получается из-за округления при делении. То есть если использую

Код

$to_barss=bcdiv('58745412554152541256636121255615', '1234567890', 100);


то результат после умножения получаю такой же как исходный. Но после деления - 47583784601875998294946.84270106441857968620907514450258381497351271625.......... а мне нужно только целое число

round ($to_barss,0) возвращяет почему то 0...


Подскажите кто знает как реализовать деление без округления?.... Заранее всем спасибо smile


PM MAIL   Вверх
Fortop
Дата 12.3.2010, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



точность вычислений установить требуемую


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
chiffa
Дата 12.3.2010, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: -1
Всего: -1



так у меня ж прописано 100
Код

$to_barss=bcdiv('58745412554152541256636121255615', '1234567890', 100);


bcscale насколько я понял одно и то же что и напрямую прописать 100

или я тебя неправильно понял?
PM MAIL   Вверх
Fortop
Дата 12.3.2010, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(chiffa @  12.3.2010,  14:39 Найти цитируемый пост)
так у меня ж прописано 100

не обратил внимания.

Код

bcscale(100);
$src = '58745412554152541256636121255615';
$to_barss=bcdiv($src, '1234567890'); 
$res=bcmul($to_barss, '1234567890');

var_dump($src, $res);

//58745412554152541256636121255615
//58745412554152541256636121255614.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999729428790

Округления к сожалению нет, но его можно написать самостоятельно.

Сравнивать числа типа float на равенство - нельзя. Обычно обходятся сравнением на < или > c определенной погрешностью.

Например
Код

if ($a < $b + 0.001 && $a > $b - 0.001) {
    // число в пределах погрешности 0.002
}



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0790 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.