Когда использовать Плавание

Строгие стандарты: нестатический метод [& lt; class> :: & lt; method>] не следует называть статически

Происходит при попытке вызвать не- статический метод для класса, поскольку он был статичным, и вы также имеете флаг E_STRICT в настройках error_reporting().

Пример:

class HTML {
   public function br() {
      echo '
'; } }

HTML::br() или $html::br()

Вы действительно можете избежать этой ошибки, не добавляя E_STRICT к error_reporting(), например

error_reporting(E_ALL & ~E_STRICT);

, поскольку, как и для PHP 5.4.0 и выше, E_STRICT включен в E_ALL [ ref ]. Но это не рекомендуется. Решение состоит в том, чтобы определить вашу предполагаемую статическую функцию как фактическую static:

public static function br() {
  echo '
'; }

или вызвать функцию условно:

$html = new HTML();
$html->br();

Похожие вопросы:

38
задан mskfisher 9 May 2012 в 19:05
поделиться

7 ответов

Короткий ответ: только необходимо использовать плавание , когда Вы знаете точно, что Вы делаете и почему.

ответ Long: плавания (в противоположность удваивается ) действительно больше не используются вне 3D API, насколько я знаю. Плавания и удваиваются, имеют те же рабочие характеристики на современных центральных процессорах, удваивается, несколько больше, и это - все. Если в сомнении, просто используйте дважды.

Ах да, и использование десятичное число для финансовых вычислений, конечно.

54
ответ дан Tamas Czinege 27 November 2019 в 03:17
поделиться

Все вычисления с плавающей точкой являются inaccurature в общем случае, плавания просто больше, чем удваивается. Если Вы хотите больше информации, имеют чтение , Что Каждый Программист Должен Знать Об Арифметике С плавающей точкой

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

11
ответ дан U62 27 November 2019 в 03:17
поделиться

Во-первых, никогда не используйте плавания, или удваивается, если Вы хотите представить десятичные значения точно - используют любой целые типы (интервал, долго и т.д.) или десятичное число (который является просто целым типом с масштабным коэффициентом). Плавания и удваиваются, преобразовываются внутренне в экспоненциальное представление в основе 2, и числа, представленные точно в экспоненциальном представлении в основе 10, не могут в целом быть представлены точно. (Например, номер 10 только представлен приблизительно плаваниями или удваивается).

111-секундный, с точки зрения точности это зависит от того, в чем Вы нуждаетесь. Я не соглашаюсь с Вашим чувством, что никогда нет вычислений, где точность не имеет значения. У Вас обычно есть определенная потребность, с точностью до которой Ваш конечный результат, говорят, 3 цифры. Не имеет смысла искать самую высокую точность, возможную, если Ваш вход только ограничил точность - говорят, что Вы весите приблизительно 5 г муки, и Ваш масштаб только имеет точность к 0.5 г. Однако промежуточное вычисление обычно извлекают выгоду из более высокой точности, но что-то, что более важно, чем высокая точность если довольно часто скорость.

В-третьих, при формовке ряда вычислений, говорят в цикле, необходимо знать то, что Вы делаете при контакте с любыми неточными вычислениями - Вы подвергнетесь ошибкам округления, и некоторые алгоритмы не могут достигнуть ответа ни до какой степени точности. Понимание этих проблем подробно может потребовать курса в числовом анализе. Это не зависит от того, выбираете ли Вы плавания, или удваивается для Ваших вычислений.

Для вычислений с плавающей точкой я обычно шел бы с, удваивается, так как они являются более общими и быстрее, чем плавания. Однако плавания меньше и если необходимо сохранить многие из них, они - выбор предотвратить проблему производительности из-за неудачных обращений в кэш.

К моему знанию, обработка с плавающей точкой поддерживается в аппаратных средствах для, удваивается, но не плавания, так использование плаваний подвергается преобразованию для удвоения. Однако некоторые стандартные программы остановились бы раньше при вычислении значения многократно при передаче плавания так как это подразумевает, что Вы только хотите приблизительно 8 точности цифр по сравнению с приблизительно 16 для, удваивается.

8
ответ дан ILoveFortran 27 November 2019 в 03:17
поделиться

Существует много случаев, которые Вы хотели бы использовать float. То, что я не понимаю однако, то, что можно использовать вместо этого. Если Вы означаете использовать double вместо float, то да, в большинстве случаев, Вы хотите сделать это. Однако double будет также иметь проблемы точности. Необходимо использовать decimal каждый раз, когда точность важна.

float и double очень полезны во многих приложениях. decimal дорогой тип данных и его диапазон (величина наибольшего числа, которое она может представить), [меньше чем 118]. Компьютеры обычно имеют поддержку уровня специального оборудования тех типов данных. Они используются много в научных вычислениях. В основном они - основные дробные типы данных, которые Вы хотите использовать. Однако в денежных вычислениях, где точность чрезвычайно важна, decimal, способ пойти.

7
ответ дан Mehrdad Afshari 27 November 2019 в 03:17
поделиться

Наиболее распространенная причина, о которой я мог думать, состоит в том, чтобы оставить свободное место. Не то, чтобы это часто стоит взволновать о, но в некоторых случаях это имеет значение. Плавание поднимает вдвое меньше памяти, чем двойное, таким образом, можно получить вдвое больше в том же пространстве. Например, у меня был массив чисел, который был слишком большим для вписывания в RAM, как удваивается, но соответствие как массив плавает.

5
ответ дан John D. Cook 27 November 2019 в 03:17
поделиться

Существует на самом деле одна вещь, где все еще распространено использовать плавания иначе "одинарная точность" с 32 битами: Графические приложения и печать.

другая причина видеокарты с их GPU. Чем меньший тип данных, тем быстрее операция, потому что должно быть транспортировано меньше битов. Целочисленные типы данных имеют проблемы с Изображениями Расширенного динамического диапазона: глаз может функционировать по диапазону яркости 1: 10^13 и различает приблизительно 4 000 уровней. Таким образом, в то время как целочисленные типы данных могут сохранить количество уровней, они не могут сохранить яркость фона, в то время как плавания не имеют никаких проблем с этим. На самом деле IEEE 754R позволяет новую "половину точности" плавание с 16 битами и мантисса на 10 битов, которая теряет некоторую точность, но позволила бы еще большую скорость. OpenGL и DirectX, например, использование плавают экстенсивно. Глаз является очень прощающим с артефактами, таким образом, без проблем там.

Все другие медиа, основывающиеся на графике, наследовали плавания как convienient мера. Мантисса имеет 24 бита, позволяющие поэтому 2^24 = 16,7 миллионов последовательных шагов. Если у Вас есть принтер с разрешением на 2 000 точек на дюйм, Вы все еще можете распечатать листы на 213x213 м. Более чем достаточно точности.

5
ответ дан 27 November 2019 в 03:17
поделиться

Используйте плавание для производительность и размер . Если можно управлять потерей точности.

, В то время как это верно, что современный процессор занимает то же количество времени для обработки одинарной и двойной точности opertions, можно иногда добираться дважды пропускная способность при использовании плаваний с SIMD (MMX/SSE/и т.д. на x86) инструкции.

регистры SSE 128 битов шириной, и могут содержать , 4 плавания или 2 удваиваются . Таким образом, если используется правильно, можно сделать, вдвое больше операций с плаваниями по сравнению с удваивается.

сокращение размера (4 байта вместо 8) становится важным при контакте с очень большими наборами данных (и сокращение размера обычно улучшает производительность также из-за кэширования, и т.д.)

3
ответ дан nimrodm 27 November 2019 в 03:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: