PHP: <?php echo (float)"-"; Ждал нолик, а вылезло почему-то "-0"... :? Что это за число такое? (PHP 5.2.5)
PHP: <?php if(0-0 === 0) { echo'Минус ноль равно нулю'; } Походу, если перед минусом отсутствует цифра, то интерпретатор подставляет 0.
Покопал литературу. Оказывается, плавающие числа в современных машинах/процессорах представляются так, что действительно, бывает ноль без знака, а бывает ноль со знаком :/ причем в математических операциях между ними нет разницы, а вот при сравнении они вроде как разные числа. Зачем так было сделано - ХЗ, зачем PHP трактует минус как минус ноль - тоже ХЗ, в скрипт добавлена заплатка, писать на bugs.php.net лень. antonn Если ты про null, то null это null, а float это float. Разные типы данных. Я жестко привожу тип к float.
Dagdamor Т.е. у тебя нет сомнений, что вот в этой фигне (float)"-"; нет nul? Ты точно знаешь механизмы интерпритации и все такое?...
antonn, Код (Text): sign = nz0 = nz = 0; value(rv) = 0.; ... if (*s == '-') { sign = 1; s++; } else if (*s == '+') { s++; } if (*s == '\0') { s = s00; goto ret; } ... if (se) *se = (char *)s; result = sign ? -value(rv) : value(rv);
Sergey89 речь идет именно о сабжевой конструкции, и о том, как интерпритатор представит его и к какому типу приведет.
antonn Не nul, а null! Да, точно уверен. Конструкция (float)$value должна приводить выражение к типу float. null - другой тип. Да и так видно, что результат имеет тип float, отображается-то нолик?
ну null так null, в разных языках по разному, уже путаюсь (да и не суть важно, меня поняли). отображается где? то, что отображается - уже даже не нолик, это 48 в байтике я еще раз попробую сказать - ты уверен, что интерпритатор делает в точности то, что ты говоришь? что он не понимает твою конструкцию как ему виднее? тем более что в пхп типизация очень даже пространная.
antonn Отображается в первом сообщении темы. Я не говорю "того, что интерпритатор делает". Я говорю, что пытаюсь привести строку к числу. PHP это позволяет. Вот только число в результате получается какое-то... странное. Вот и все. При чем тут NULL - в упор не понимаю.
блин, не писали вы интерпритаторы... ладно, не буду настаивать, нет там null, есть нолик и вобще там волшебство.
PHP: <?php $a=(float)"-"; echo gettype($a); ?> Оба ошиблись ;-) Upd. Наверное, разделение в PHP float и double чисто символическое. Кажется, что есть только 2 типа - integer и string. Если (float) заменить на (int), получим 0, как при обраотке через (int) любой другой строки. А (float) его (минус) съедает нормально. Отсюда такие рассуждения, это конечно только мои догадки.
Преобразование к float выполнено по тому коду, что я привёл. И оттуда ясно видно, откуда минус берётся. А float и double в php одно и то же.
Тогда уж из антиматерии, стебаться - так стебаться с умом А у строк из темной материи длина выражается комплексным числом.
Ну нет у float-типа такого значения как 0. Нет. В принципе. Только если под него специальный бит не отвели (на каких-то архитектурах это было). Есть очень близкое к нулю положительное и очень близкое к нулю отрицательное. Потому как в какую степень число не возводи все-равно будет больше нуля (ну или меньше).
AlexGousev А вот и нет. Строго говоря, число, представленное одними нулями в двоичной записи, означает что-то типа 1e-128, т.е. очень маленькое число, но во всех операциях такая запись трактуется как особая. В вещественной арифметике 8x86 есть специальные записи для: 0 (как выяснилось, отдельно для +0 и -0), для NaN, и для двух бесконечностей. Может, еще что-то есть, но я читал только об этих. Ради эксперимента можешь сложить два нуля. У тебя получится такой же ноль, а не "очень маленькое, но в два раза большее" число
Абидна, да! Dagdamor Я о способе хранения, а не о способе обработки. То, что такой вариант специально обрабатывается - это уже логика процессора. Просто суть-то в том, что способ хранения - число в степени. Отсюда и неточность и отсутствие строгого нуля.