Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Общие вопросы > Вывод больших чисел |
Автор: chiffa 10.3.2010, 11:42 |
Добрый день. После определенного ряда вычислений получаю довольно длинное число, которое выводится как: 1.0542197938321E-081 Подскажите как его можно вывести полностью?.... |
Автор: ksnk 10.3.2010, 12:04 |
полностью его скорее всего не вывести. Если поинтересоваться способом хранения вещественных чисе в момпьютере, то можно обнаружить, что число хранится в виде мантиссы - обычного целого числа и порядка - еще одного целого. нормальное число получается когда маттиссу умножают на 2 в степени "порядок", с некоторыми непринципиальными выкрутасами. Так что всех значащих цифр числа компьютер просто не хранит ;) для любителей точных вычислений можно порекомендовать модуль http://ru2.php.net/manual/en/ref.bc.php - он работает с числами как со строками и может оперировать числами со значительно бОльшим количеством знаков. |
Автор: chiffa 10.3.2010, 12:12 |
спасибо за ответ! а можно ли как то полученое 1.0542197938321E-081 перевести в строку (с полным количеством цифр)? |
Автор: Avrely 10.3.2010, 12:14 |
http://www.icosaedro.it/bignumbers/BigInt.htm ![]() BigINT может отобразить все число |
Автор: chiffa 10.3.2010, 13:11 | ||
Avrely, пасиба! то что нужно! Единственный вопрос: не подскажешь как там провести деление?
ругается Fatal error: Cannot pass parameter 2 by reference in |
Автор: Fortop 10.3.2010, 13:32 |
Бог ты мой... Вас дружно забанили на php.net? http://php.net/bcmath http://php.net/gmp |
Автор: chiffa 12.3.2010, 11:37 | ||||||
Fortop, гм... признаю свою вину, меру, степень, глубину... (с) Но возник небольшой вопрос, возможно даже не так из программирования, как из математики.... Допустим я использую
результат получаю - 47583784601875998294946 при выполнении
результат отличается от исходного - 58745412554152541256635080883940 то что было 58745412554152541256636121255615 то что стало 58745412554152541256635080883940 насколько я понимаю разница получается из-за округления при делении. То есть если использую
то результат после умножения получаю такой же как исходный. Но после деления - 47583784601875998294946.84270106441857968620907514450258381497351271625.......... а мне нужно только целое число round ($to_barss,0) возвращяет почему то 0... Подскажите кто знает как реализовать деление без округления?.... Заранее всем спасибо ![]() |
Автор: Fortop 12.3.2010, 15:04 |
точность вычислений установить требуемую |
Автор: chiffa 12.3.2010, 15:39 | ||
так у меня ж прописано 100
bcscale насколько я понял одно и то же что и напрямую прописать 100 или я тебя неправильно понял? |
Автор: Fortop 12.3.2010, 17:01 | ||||
не обратил внимания.
Округления к сожалению нет, но его можно написать самостоятельно. Сравнивать числа типа float на равенство - нельзя. Обычно обходятся сравнением на < или > c определенной погрешностью. Например
|