Number: Difference between revisions

From Bohemia Interactive Community
Jump to navigation Jump to search
m (Added info about precision loss)
m (Moved Regex to match all)
Line 5: Line 5:
In SQF, there are multiple accepted number formats.
In SQF, there are multiple accepted number formats.
However, all of them will result in the same  {{Inline code|SCALAR}} ([[typeName]]) value type.
However, all of them will result in the same  {{Inline code|SCALAR}} ([[typeName]]) value type.
{{Informative|Regex to match all numbers in [[SQF_syntax|SQF]] is {{Inline code|<nowiki>(((\$|0x)[0-9a-fA-F]+)|(\.[0-9]+))|(\b[0-9]+(\.[0-9]+|[eE][-+]?[0-9]+)?)\b</nowiki>}}}}


The '''<span style="color: #008000;">largest positive</span>''' number that can be archived is {{Inline code|3.4028235e38}} and the '''<span style="color: #800000;">largest negative</span>''' is {{Inline code|-3.4028235e38}}.<br>
The '''<span style="color: #008000;">largest positive</span>''' number that can be archived is {{Inline code|3.4028235e38}} and the '''<span style="color: #800000;">largest negative</span>''' is {{Inline code|-3.4028235e38}}.<br>
Line 13: Line 11:
To check, if a number is finite, one can use the [[finite]] operator.
To check, if a number is finite, one can use the [[finite]] operator.


{{Informative|Regex to match all numbers in [[SQF_syntax|SQF]] is {{Inline code|<nowiki>(((\$|0x)[0-9a-fA-F]+)|(\.[0-9]+))|(\b[0-9]+(\.[0-9]+|[eE][-+]?[0-9]+)?)\b</nowiki>}}}}
{{Important|Due to technical limitations, the precision of floating point numbers is limited. Please refer to [https://en.wikipedia.org/wiki/IEEE_754 IEEE 754] for more info about the technical details.}}
{{Important|Due to technical limitations, the precision of floating point numbers is limited. Please refer to [https://en.wikipedia.org/wiki/IEEE_754 IEEE 754] for more info about the technical details.}}



Revision as of 03:38, 29 March 2019

Template:SideTOC A number is, depending on scope, either a single precision floating point number (when talking about scripting) or a range of numerical types when talking about config context.

Scripting

In SQF, there are multiple accepted number formats. However, all of them will result in the same SCALAR (typeName) value type.

The largest positive number that can be archived is 3.4028235e38 and the largest negative is -3.4028235e38.
It also is possible to generate positive or negative infinite values using either 1e39 (string representation: 1.#INF) or -1e39 (string representation: -1.#INF).

To check, if a number is finite, one can use the finite operator.

Regex to match all numbers in SQF is (((\$|0x)[0-9a-fA-F]+)|(\.[0-9]+))|(\b[0-9]+(\.[0-9]+|[eE][-+]?[0-9]+)?)\b
Due to technical limitations, the precision of floating point numbers is limited. Please refer to IEEE 754 for more info about the technical details.

Decimal (Base 10)

A decimal number is your normal 0.5 syntax stuff with one extra: You may ommit the initial pack of digits.

Some Examples would be:

  • 5.197
  • 0.47
  • 16.0
  • .8314
  • 12345

A regex catching theese kind of numbers could look like this ((\.[0-9]+)|(\b[0-9]+(\.[0-9]+)?))\b

Scientific Notation

The Scientific Notation is a way of expressing numbers that are too big or too small to be conveniently written in decimal form.

It starts of like a normal decimal and then gets expressed by an E (Not case sensitive, thus e is also valid) followed by an __optional__ + or - sign and ends with a range of digits.

Some Examples would be:

  • 1.23E4 ⇔ 1.23 ⋅ 104 ⇔ 12300
  • 5e-2 ⇔ 5 ⋅ 10-2 ⇔ 0.05

A regex catching theese kind of numbers could look like this ([0-9]+.)?[0-9]+[eE][+-]?[0-9]+

Hexadecimal (Base 16)

In SQF, [https://en.wikipedia.org/wiki/Hexadecimal hexadecimal) (also base 16, or hex) is a positional numeral system with a base of 16. They start either with 0x or with a single $.

This gets followed by one of the following characters: 0 1 2 3 4 5 6 7 8 9 A B C D E F. Note that casing does not matters, thus both 0xa and 0xA are valid

Some Examples would be:

  • 0xa5
  • $5C
  • $FFFFFF
  • 0x123ABC

A regex catching theese kind of numbers could look like this ((\$|0x)[0-9a-fA-F]+)\b

Config

Template:Stub Unlike scripting, configs actually do allow for multiple number types (integer, float, etc.). They are stored proper with their corresponding type in mind.