Если Длинное целое и плавание оба берут 4 байта для хранения в памяти затем, почему их диапазоны отличаются?
Попробуйте:
function truncate($string, $chars = 50, $terminator = ' …') {
$cutPos = $chars - mb_strlen($terminator);
$boundaryPos = mb_strrpos(mb_substr($string, 0, mb_strpos($string, ' ', $cutPos)), ' ');
return mb_substr($string, 0, $boundaryPos === false ? $cutPos : $boundaryPos) . $terminator;
}
Но вы должны убедиться, что ваша внутренняя кодировка правильно установлена.
-121--3978022-Они не всегда одинаковы. Но даже когда они есть, их диапазоны разные, потому что они служат разным целям. Один предназначен для целых чисел без десятичных знаков, и один для десятичных средств.
целые числа хранятся так:
Поплавки хранятся по-разному, обеспечивая больший диапазон за счет точности:
FLOAT представлен в экспоненциальной форме: (+/-) S * (база) ^ E
, кстати, «длинные» не всегда 32 бита. См. Эта статья .
Различный способ кодировать ваши номера.
Длинные подсчитываются от 1 до 2 ^ (4 * 8).
FLOAT использует только 23 из 32 битов для «подсчета». Но добавляет «диапазон» с экспонатом в других битах. Таким образом, у вас есть больше числа, но они менее точны (в нижних частях):
1.2424 * 10 ^ 54 (показатель Mantisse *], безусловно, больше 2 ^ 32. Но вы можете различить длину 2 ^ 31 с длинного 2 ^ 31-1, тогда как вы не можете различить поплавок 1.24 * 10 ^ 54 и поплавок 1.24 * 10 ^ 54 - 1: 1 просто теряется в этом представлении как плавать.
Это можно объяснить с точки зрения того, почему представление с плавающей точкой может представлять более широкий диапазон чисел, чем представление фиксированного точка. Этот текст из входа Wikipedia :
Преимущество плавающей точки представление на фиксированной точке (и Целое число) Представительство состоит в том, что он может Поддержите гораздо более широкий диапазон значений. Например, фиксированная точка представление, которое имеет семь десятичных цифры, с десятичной точкой быть расположенным после пятого цифра, может представлять числа 12345.67, 8765,43, 123.00 и так далее, тогда как плавающая точка представление (например, IEEE 754 формат penimal32) с семью десятичными цифры могут дополнительно представлять 1.234567, 123456.7, 0,00001234567, 1234567000000000 и так далее. То Формат с плавающей точкой нужно слегка Больше хранения (чтобы кодировать положение из точки Radix), поэтому при хранении в одно и то же пространство, количества плавающих точек достичь их большего диапазона на затраты точности.
. По-разному.
В зависимости от знаний о вашей (и вашей команде) (I.e. XPath не будет эффективным, никто не знает XPath, но все знают Linq к XML). Также некоторые операции могут быть проще в одном или иной.
-121--4904034-Их диапазоны различны, потому что они используют различные способы представления чисел.
Долгое
(в C) эквивалентно длинному INT
. Размер этого типа варьируется между процессорами и компиляторами, но часто, как вы говорите, 32 бита. На 32 битах он может представлять 2 32 Разные значения. Поскольку мы часто хотим использовать негативные числа, компьютеры обычно представляют целые числа, используя формат, называемый «.« ». Таким образом, мы можем представлять номера (-2 31 и до (2 31 -1). Подсчет числа 0, это добавляет до 2 32 номеров.
FLOAT
(в C) обычно является единым иссечением IEEE 754 отформатированное число. При 32 битах этот тип данных также может принимать 2 32 различных битовых шаблонов, но они не используются для непосредственного представления целых чисел, как в длинном
. Вместо этого они представляют знак, и мантис и экспонент нормализованного десятичного числа.
Действительно, поплавок занимает 4 байта (32бита), но так как это поплавок Вы должны хранить разные вещи в этих 32 битах:
Вы можете видеть, что диапазон float напрямую зависит от количества битов, выделенных до значимости, и значения min / max зависят от озвученных битов, выделенных для показателя.
С верхним примером:
, касающихся длинного целого числа, у вас есть 1 бит, используемый для знака, а затем 31 бит, чтобы представлять целочисленное значение, ведущее к максимуму 2 147 483 647.
Вы можете посмотреть на Википедию на более точную информацию: Википедия - Плавающая точка
На ручном вагонном высоком уровне, плавающая точка SACREFICES Integer Precision для расширения его диапазона. Это делается путем объединения базового значения с помощью коэффициента масштабирования. Для больших ценностей поплавок не сможет точно представлять все целые числа, но для небольших значений он будет представлять лучшее, чем целочисленная точность.
В целом: когда у вас есть больше ценностей (поплавок до 10 ^ Многие), у вас меньше точности.
Это то, что происходит здесь. Если вам нужны целые числа, 32-разрядные дадут вам больше.
Нет, размер примитивных типов данных в C является реализацией.
Это вход Wiki четко говорит: формат с плавающей точкой требует немного больше хранения (чтобы кодировать положение точки Radix), поэтому при сохранении в одном и том же пространстве номера с плавающей точкой достигают их больше диапазон за счет точности.