Difference between revisions of "Float/ru"

From Second Life Wiki
Jump to navigation Jump to search
(Первопроходец)
 
(упорядочить)
Line 51: Line 51:


{| class="sortable" {{Prettytable}}
{| class="sortable" {{Prettytable}}
|+ Lossy functions
|+ Функции с потерями (Lossy functions)
|- {{Hl2}}
|- {{Hl2}}
! Name
! Название
! title="Infinity / NaN support" {{!}} inf/nan
! title="Infinity / NaN support" {{!}} inf/nan
! Rounding
! Округление
! Truncation
! Сокращение
! Notes
! Пояснения
|-
|-
| Typecast
| Typecast
| Yes
| Да
| Yes
| Да
| No
| Нет
| <code>(float)float_value</code><br>Mono only gives [https://jira.secondlife.com/browse/SCR-397?focusedCommentId=340847&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-340847 6 digits of precision].
| <code>(float)float_value</code><br>дает только в режиме "'''Mono'''" скрипта  [https://jira.secondlife.com/browse/SCR-397?focusedCommentId=340847&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-340847 6 знаков точности].
|-
|-
| [[Format Decimal]]
| [[Format Decimal]]
| No
| Нет
| Yes
| Да
| No
| Нет
|
|
|-
|-
| [[Float2String]]
| [[Float2String]]
| No
| Нет
| Yes
| Да
| Yes
| Да
|  
|  
|}
|}
{| class="sortable" {{Prettytable}}
{| class="sortable" {{Prettytable}}
|+ Lossless functions
|+ Функции без потерь (Lossless functions)
|- {{Hl2}}
|- {{Hl2}}
! Name
! Название
! Speed
! Скорость
! Reversible
! Обратимость
! title="Infinity / NaN support" {{!}} inf/nan support
! title="Infinity / NaN support" {{!}} inf/nan support
! [[PI]]
! [[PI]]  [[PI/ru|PI]]
! Notes
! Пояснения
|-
|-
| [[Float2Hex]]
| [[Float2Hex]]
| Fast
| Быстрая
| <code>(float)</code>
| <code>(float)</code>
| No
| Нет
| 0x6487ED5p-25
| 0x6487ED5p-25
| Since the output is in the Hexadecimal Scientific Notation, it's not really human readable.
| Поскольку выход в шестнадцатеричной научной записи, это не совсем визуально читабельно.
|-
|-
| [[Float2Sci]]
| [[Float2Sci]]
| Slow
| Медленная
| <code>(float)</code>
| <code>(float)</code>
| No
| Нет
| 3.1415925
| 3.1415925
| Useful when you want the result to be lossless but also human readable, comes at the cost of speed.
| Полезно, если вы хотите, чтобы результат был без потерь и визуально читабельный, происходит за счет низкой скорости.
|-
|-
| [[User:Strife_Onizuka/Float_Functions#Base64-Float|FUIS]]
| [[User:Strife_Onizuka/Float_Functions#Base64-Float|FUIS]]
| Fastest
| Быстрейшая
| [[User:Strife_Onizuka/Float_Functions#Base64-Float|SIUF]]
| [[User:Strife_Onizuka/Float_Functions#Base64-Float|SIUF]]
| No
| Нет
| "QEkP2g"
| "QEkP2g"
| Not at all human readable. Guarantied to always use six characters.
| Вовсе не читабельно. Гарантированно всегда  использование шести символов.
|}
|}
*Бесконечность доступна только в '''Mono'''.  
*Infinity (бесконечность) доступна только в '''Mono'''.  
 
<div id="box">
== См. также ==
<div style="padding: 0.5em">
'''Артикли'''
*LSL Примеры: [[Format_Decimal|Format Decimal]]
</div>
 
</div></div>
</div></div>

Revision as of 03:32, 8 June 2013

К типу данных с плавающей точкой относятся 32-битные числа в IEEE-754 форме, то есть числа с плавающей точкой относятся к вещественному типу. Если Вам нужна десятичная точка в своём числе, то примените вещественный тип чисел float.

Диапазон значений в пределах от 1.175494351E-38 до 3.402823466E+38 .

Они могут быть указаны в научной нотации, наподобие 2.6E-5 .

Если функция требует плавающую точку в качестве параметра, и число является целым числом (например, 5), то не забудьте добавить .0 - так создается float (в нашем примере, 5.0).

Если вы делите 2 константы, не забудьте определить их вещественными числами, иначе ваш результат может получить округление. А еще лучше, вычислять математику на калькуляторе и сохранить на сервере несколько циклов.

Пример

<lsl>float min = 1.175494351E-38; float max = 3.402823466E+38; float sci = 2.6E-5; float sci_a = 2.6E+3; float sci_b = 2.6E3; float sci_c = 26000.E-1; float f = 2600;//неявное приведение к типу 'float' float E = 85.34859; float cast = (float)"42";//явное приведение к типу 'float' float Infintity = (float)"inf"; //-- могут быть отрицательными, приведет к ошибке, если математика оценивалась в LSO, см. 'предостережения' ниже float NotANumber = (float)"nan"; //-- могут быть отрицательными, приведет к ошибке, если математика оценивалась в LSO, см. 'предостережения' ниже </lsl>

Полезные фрагменты

Если вам нужно для проверки произвольных float без ограничений, то следующая функция идеально здесь подходит: <lsl>integer isValidFloat(string s) { return (string)((float)s) != (string)((float)("-" + llStringTrim(s, STRING_TRIM_HEAD))); }</lsl>

Тем не менее, следующий фрагмент более эффективен, но проходит с отмеченными оговорками. Если это не проблема для Вас, то это рекомендуемый вариант, особенно в режиме скрипта Mono: <lsl>integer isValidFloat(string s) { return (float)(s + "1") != 0.0; }</lsl> Предостережения:

  • Под LSO-LSL научная нотация (экспоненциальная) с показателем больше 38 не удаётся (вкрадывается математическая ошибка). Mono не влияет, так как поддерживает infinity
  • Под Mono и LSO-LSL вы можете обнаружить странные результаты, если имеете дело со строкой содержащей более 9 знаков после запятой. Помните, что приведение (распределение) строки в LSL дает только до 6 знаков безопасно, и вследствие человеческого фактора редко будет точной, но также малые значения обычно не все, что полезно.
  • "nan", "inf" и их негативы есть специальными значениями текста, которые можно привести из строки (с любым пробелами или конечными символами). Это значение приведет к математической ошибке, когда переменная оценивается в LSO. Если Вы разбираете пользовательские данные, путем приведения строки в обращении, используйте следующий код (заменив vStrDta с вашим именем переменной String) см. SVC-6847
    • <lsl>(float)llList2String( llParseStringKeepNulls( llToLower( llStringTrim( vStrDta, STRING_TRIM ) ), ["inf", "nan"], [] ), 0 )</lsl>

Float-to-String

Есть несколько способов преобразования с float в string. Первый - приведение в строку (string)(1.0) , что, однако, имеет недостаток округления и ограничивается до шести знаков после точки. Некоторые функции были написаны для обеспечения больших возможностей. Они делятся на две категории, без потерь (Lossless functions) и с потерями (Lossy functions).

Функции с потерями (Lossy functions)
Название inf/nan Округление Сокращение Пояснения
Typecast Да Да Нет (float)float_value
дает только в режиме "Mono" скрипта 6 знаков точности.
Format Decimal Нет Да Нет
Float2String Нет Да Да
Функции без потерь (Lossless functions)
Название Скорость Обратимость inf/nan support PI PI Пояснения
Float2Hex Быстрая (float) Нет 0x6487ED5p-25 Поскольку выход в шестнадцатеричной научной записи, это не совсем визуально читабельно.
Float2Sci Медленная (float) Нет 3.1415925 Полезно, если вы хотите, чтобы результат был без потерь и визуально читабельный, происходит за счет низкой скорости.
FUIS Быстрейшая SIUF Нет "QEkP2g" Вовсе не читабельно. Гарантированно всегда использование шести символов.
  • Infinity (бесконечность) доступна только в Mono.

См. также

Артикли