Jump to content

Octal

From Wikipedia, the free encyclopedia
(Redirected fromOctal numeral system)
Numeral systems,bitsandGray code
hex dec oct 3 2 1 0 step
0hex 00dec 00oct 0 0 0 0 g0
1hex 01dec 01oct 0 0 0 1 h1
2hex 02dec 02oct 0 0 1 0 j3
3hex 03dec 03oct 0 0 1 1 i2
4hex 04dec 04oct 0 1 0 0 n7
5hex 05dec 05oct 0 1 0 1 m6
6hex 06dec 06oct 0 1 1 0 k4
7hex 07dec 07oct 0 1 1 1 l5
8hex 08dec 10oct 1 0 0 0 vF
9hex 09dec 11oct 1 0 0 1 uE
Ahex 10dec 12oct 1 0 1 0 sC
Bhex 11dec 13oct 1 0 1 1 tD
Chex 12dec 14oct 1 1 0 0 o8
Dhex 13dec 15oct 1 1 0 1 p9
Ehex 14dec 16oct 1 1 1 0 rB
Fhex 15dec 17oct 1 1 1 1 qA

Octal(base 8) is anumeral systemwitheightas thebase.

In the decimal system, each place is apower of ten.For example:

In the octal system, each place is a power of eight. For example:

By performing the calculation above in the familiar decimal system, we see why 112 in octal is equal toin decimal.

Octal numerals can be easily converted frombinaryrepresentations (similar to aquaternary numeral system) by grouping consecutive binary digits into groups of three (starting from the right, for integers). For example, the binary representation for decimal 74 is 1001010. Two zeroes can be added at the left:(00)1 001 010,corresponding to the octal digits1 1 2,yielding the octal representation 112.

The octalmultiplication table
× 1 2 3 4 5 6 7 10
1 1 2 3 4 5 6 7 10
2 2 4 6 10 12 14 16 20
3 3 6 11 14 17 22 25 30
4 4 10 14 20 24 30 34 40
5 5 12 17 24 31 36 43 50
6 6 14 22 30 36 44 52 60
7 7 16 25 34 43 52 61 70
10 10 20 30 40 50 60 70 100

Usage

[edit]

In China

[edit]
Fuxi's "Earlier Heaven" Arrangement of the Eight Trigrams

The eightbaguaor trigrams of theI Chingcorrespond to octal digits:

  • 0 = ☷, 1 = ☳, 2 = ☵, 3 = ☱,
  • 4 = ☶, 5 = ☲, 6 = ☴, 7 = ☰.

Gottfried Wilhelm Leibnizmade the connection between trigrams, hexagrams and binary numbers in 1703.[1]

By Native Americans

[edit]
  • TheYuki languageinCaliforniahas an octal system because the speakers count using the spaces between their fingers rather than the fingers themselves.[2]
  • ThePamean languagesinMexicoalso have an octal system, because their speakers count on the knuckles of a closed fist.[3]

By Europeans

[edit]
  • It has been suggested that the reconstructedProto-Indo-European (PIE)word for "nine" might be related to the PIE word for "new". Based on this, some have speculated that proto-Indo-Europeans used an octal number system, though the evidence supporting this is slim.[4]
  • In 1668,John WilkinsinAn Essay towards a Real Character, and a Philosophical Languageproposed use of base 8 instead of 10 "because the way of Dichotomy or Bipartition being the most natural and easie kind of Division, that Number is capable of this down to an Unite".[5]
  • In 1716, KingCharles XII of SwedenaskedEmanuel Swedenborgto elaborate a number system based on 64 instead of 10. Swedenborg argued, however, that for people with less intelligence than the king such a big base would be too difficult and instead proposed 8 as the base. In 1718 Swedenborg wrote (but did not publish) a manuscript: "En ny rekenkonst som om vexlas wid Thalet 8 i stelle then wanliga wid Thalet 10"(" A new arithmetic (or art of counting) which changes at the Number 8 instead of the usual at the Number 10 "). The numbers 1–7 are there denoted by the consonants l, s, n, m, t, f, u (v) and zero by the vowel o. Thus 8 =" lo ", 16 =" so ", 24 =" no ", 64 =" loo ", 512 =" looo "etc. Numbers with consecutive consonants are pronounced with vowel sounds between in accordance with a special rule.[6]
  • Writing under the pseudonym "Hirossa Ap-Iccim" inThe Gentleman's Magazine,(London) July 1745,Hugh Jonesproposed an octal system for British coins, weights and measures. "Whereas reason and convenience indicate to us an uniform standard for all quantities; which I shall call theGeorgian standard;and that is only to divide every integer in eachspeciesinto eight equal parts, and every part again into 8 real or imaginary particles, as far as is necessary. For tho' all nations count universally bytens(originally occasioned by the number of digits on both hands) yet 8 is a far more complete and commodious number; since it is divisible into halves, quarters, and half quarters (or units) without a fraction, of which subdivisiontenis uncapable.... "In a later treatise onOctave computation(1753) Jones concluded: "Arithmetic byOctavesseems most agreeable to the Nature of Things, and therefore may be called Natural Arithmetic in Opposition to that now in Use, by Decades; which may be esteemed Artificial Arithmetic. "[7]
  • In 1801,James Andersoncriticized the French for basing themetric systemon decimal arithmetic. He suggested base 8, for which he coined the termoctal.His work was intended as recreational mathematics, but he suggested a purely octal system of weights and measures and observed that the existing system ofEnglish unitswas already, to a remarkable extent, an octal system.[8]
  • In the mid-19th century, Alfred B. Taylor concluded that "Our octonary [base 8]radixis, therefore, beyond all comparison the "best possible one"for an arithmetical system." The proposal included a graphical notation for the digits and new names for the numbers, suggesting that we should count "un,du,the,fo,pa,se,ki,unty,unty-un,unty-du"and so on, with successive multiples of eight named"unty,duty,thety,foty,paty,sety,kityandunder."So, for example, the number 65 (101 in octal) would be spoken in octonary asunder-un.[9][10]Taylor also republished some of Swedenborg's work on octal as an appendix to the above-cited publications.

In computers

[edit]

Octal became widely used in computing when systems such as theUNIVAC 1050,PDP-8,ICL 1900andIBM mainframesemployed6-bit,12-bit,24-bitor36-bitwords. Octal was an ideal abbreviation of binary for these machines because their word size is divisible by three (each octal digit represents three binary digits). So two, four, eight or twelve digits could concisely display an entiremachine word.It also cut costs by allowingNixie tubes,seven-segment displays,andcalculatorsto be used for the operator consoles, where binary displays were too complex to use, decimal displays needed complex hardware to convert radices, andhexadecimaldisplays needed to display more numerals.

All modern computing platforms, however, use 16-, 32-, or 64-bit words, further divided intoeight-bit bytes.On such systems three octal digits per byte would be required, with the most significant octal digit representing two binary digits (plus one bit of the next significant byte, if any). Octal representation of a 16-bit word requires 6 digits, but the most significant octal digit represents (quite inelegantly) only one bit (0 or 1). This representation offers no way to easily read the most significant byte, because it's smeared over four octal digits. Therefore, hexadecimal is more commonly used in programming languages today, since two hexadecimal digits exactly specify one byte. Some platforms with a power-of-two word size still have instruction subwords that are more easily understood if displayed in octal; this includes thePDP-11andMotorola 68000 family.The modern-day ubiquitousx86 architecturebelongs to this category as well, but octal is rarely used on this platform, although certain properties of the binary encoding of opcodes become more readily apparent when displayed in octal, e.g. the ModRM byte, which is divided into fields of 2, 3, and 3 bits, so octal can be useful in describing these encodings. Before the availability ofassemblers,some programmers would handcode programs in octal; for instance, Dick Whipple and John Arnold wroteTiny BASIC Extendeddirectly in machine code, using octal.[11]

Octal is sometimes used in computing instead of hexadecimal, perhaps most often in modern times in conjunction withfile permissionsunderUnixsystems (seechmod). It has the advantage of not requiring any extra symbols as digits (the hexadecimal system is base-16 and therefore needs six additional symbols beyond 0–9).

In programming languages, octalliteralsare typically identified with a variety ofprefixes,including the digit0,the lettersoorq,the digit–letter combination0o,or the symbol&[12]or$.InMotorola convention,octal numbers are prefixed with@,whereas a small (or capital[13]) lettero[13]orq[13]is added as apostfixfollowing theIntel convention.[14][15]InConcurrent DOS,Multiuser DOSandREAL/32as well as inDOS PlusandDR-DOSvariousenvironment variableslike$CLS,$ON,$OFF,$HEADERor$FOOTERsupport an\nnnoctal number notation,[16][17][18]and DR-DOSDEBUGutilizes\to prefix octal numbers as well.

For example, the literal 73 (base 8) might be represented as073,o73,q73,0o73,\73,@73,&73,$73or73oin various languages.

Newer languages have been abandoning the prefix0,as decimal numbers are often represented with leading zeroes. The prefixqwas introduced to avoid the prefixobeing mistaken for a zero, while the prefix0owas introduced to avoid starting a numerical literal with an Alpha betic character (likeoorq), since these might cause the literal to be confused with a variable name. The prefix0oalso follows the model set by the prefix0xused for hexadecimal literals in theC language;it is supported byHaskell,[19]OCaml,[20]Pythonas of version 3.0,[21]Raku,[22]Ruby,[23]Tclas of version 9,[24]PHPas of version 8.1,[25]Rust[26]andECMAScriptas of ECMAScript 6[27](the prefix0originally stood for base 8 inJavaScriptbut could cause confusion,[28]therefore it has been discouraged in ECMAScript 3 and dropped in ECMAScript 5[29]).

Octal numbers that are used in some programming languages (C,Perl,PostScript...) for textual/graphical representations of byte strings when some byte values (unrepresented in a code page, non-graphical, having special meaning in current context or otherwise undesired) have to be toescapedas\nnn.Octal representation may be particularly handy with non-ASCII bytes ofUTF-8,which encodes groups of 6 bits, and where any start byte has octal value\3nnand any continuation byte has octal value\2nn.

Octal was also used forfloating pointin theFerranti Atlas(1962),Burroughs B5500(1964),Burroughs B5700(1971),Burroughs B6700(1971) andBurroughs B7700(1972) computers.

In aviation

[edit]

Transpondersin aircraft transmit a "squawk"code,expressed as a four-octal-digit number, when interrogated by ground radar. This code is used to distinguish different aircraft on the radar screen.

Conversion between bases

[edit]

Decimal to octal conversion

[edit]

Method of successive Euclidean division by 8

[edit]

To convert integer decimals to octal,dividethe original number by the largest possible power of 8 and divide the remainders by successively smaller powers of 8 until the power is 1. The octal representation is formed by the quotients, written in the order generated by the algorithm. For example, to convert 12510to octal:

125 = 82×1+ 61
61 = 81×7+ 5
5 = 80×5+ 0

Therefore, 12510= 1758.

Another example:

900 = 83×1+ 388
388 = 82×6+ 4
4 = 81×0+ 4
4 = 80×4+ 0

Therefore, 90010= 16048.

Method of successive multiplication by 8

[edit]

To convert a decimal fraction to octal, multiply by 8; the integer part of the result is the first digit of the octal fraction. Repeat the process with the fractional part of the result, until it is null or within acceptable error bounds.

Example: Convert 0.1640625 to octal:

0.1640625 × 8 = 1.3125 =1+ 0.3125
0.3125 × 8 = 2.5 =2+ 0.5
0.5 × 8 = 4.0 =4+ 0

Therefore, 0.164062510= 0.1248.

These two methods can be combined to handle decimal numbers with both integer and fractional parts, using the first on the integer part and the second on the fractional part.

Method of successive duplication

[edit]

To convert integer decimals to octal, prefix the number with "0.". Perform the following steps for as long as digits remain on the right side of the radix: Double the value to the left side of the radix, usingoctalrules, move the radix point one digit rightward, and then place the doubled value underneath the current value so that the radix points align. If the moved radix point crosses over a digit that is 8 or 9, convert it to 0 or 1 and add the carry to the next leftward digit of the current value.Addoctallythose digits to the left of the radix and simply drop down those digits to the right, without modification.

Example:

0.4 9 1 8 decimal value
+0
---------
4.9 1 8
+1 0
--------
6 1.1 8
+1 4 2
--------
7 5 3.8
+1 7 2 6
--------
1 1 4 6 6. octal value

Octal to decimal conversion

[edit]

To convert a numberkto decimal, use the formula that defines its base-8 representation:

In this formula,aiis an individual octal digit being converted, whereiis the position of the digit (counting from 0 for the right-most digit).

Example: Convert 7648to decimal:

7648= 7 × 82+ 6 × 81+ 4 × 80= 448 + 48 + 4 = 50010

For double-digit octal numbers this method amounts to multiplying the lead digit by 8 and adding the second digit to get the total.

Example: 658= 6 × 8 + 5 = 5310

Method of successive duplication

[edit]

To convert octals to decimals, prefix the number with "0.". Perform the following steps for as long as digits remain on the right side of the radix: Double the value to the left side of the radix, usingdecimalrules, move the radix point one digit rightward, and then place the doubled value underneath the current value so that the radix points align.Subtractdecimallythose digits to the left of the radix and simply drop down those digits to the right, without modification.

Example:

0.1 1 4 6 6 octal value
-0
-----------
1.1 4 6 6
- 2
----------
9.4 6 6
- 1 8
----------
7 6.6 6
- 1 5 2
----------
6 1 4.6
- 1 2 2 8
----------
4 9 1 8. decimal value

Octal to binary conversion

[edit]

To convert octal to binary, replace each octal digit by its binary representation.

Example: Convert 518to binary:

58= 1012
18= 0012

Therefore, 518= 101 0012.

Binary to octal conversion

[edit]

The process is the reverse of the previous algorithm. The binary digits are grouped by threes, starting from the least significant bit and proceeding to the left and to the right. Add leading zeroes (or trailing zeroes to the right of decimal point) to fill out the last group of three if necessary. Then replace each trio with the equivalent octal digit.

For instance, convert binary 1010111100 to octal:

001 010 111 100
1 2 7 4

Therefore, 10101111002= 12748.

Convert binary 11100.01001 to octal:

011 100 . 010 010
3 4 . 2 2

Therefore, 11100.010012= 34.228.

Octal to hexadecimal conversion

[edit]

The conversion is made in two steps using binary as an intermediate base. Octal is converted to binary and then binary to hexadecimal, grouping digits by fours, which correspond each to a hexadecimal digit.

For instance, convert octal 1057 to hexadecimal:

To binary:
1 0 5 7
001 000 101 111
then to hexadecimal:
0010 0010 1111
2 2 F

Therefore, 10578= 22F16.

Hexadecimal to octal conversion

[edit]

Hexadecimal to octal conversion proceeds by first converting the hexadecimal digits to 4-bit binary values, then regrouping the binary bits into 3-bit octal digits.

For example, to convert 3FA516:

To binary:
3 F A 5
0011 1111 1010 0101
then to octal:
0 011 111 110 100 101
0 3 7 6 4 5

Therefore, 3FA516= 376458.

Real numbers

[edit]

Fractions

[edit]

Due to having only factors of two, many octal fractions have repeating digits, although these tend to be fairly simple:

Decimal base
Prime factors of the base:2,5
Prime factors of one below the base:3
Prime factors of one above the base:11
Other Prime factors:7 13 17 19 23 29 31
Octal base
Prime factors of the base:2
Prime factors of one below the base:7
Prime factors of one above the base:3
Other Prime factors:5 13 15 21 23 27 35 37
Fraction Prime factors
of the denominator
Positional representation Positional representation Prime factors
of the denominator
Fraction
1/2 2 0.5 0.4 2 1/2
1/3 3 0.3333... =0.3 0.2525... =0.25 3 1/3
1/4 2 0.25 0.2 2 1/4
1/5 5 0.2 0.1463 5 1/5
1/6 2,3 0.16 0.125 2,3 1/6
1/7 7 0.142857 0.1 7 1/7
1/8 2 0.125 0.1 2 1/10
1/9 3 0.1 0.07 3 1/11
1/10 2,5 0.1 0.06314 2,5 1/12
1/11 11 0.09 0.0564272135 13 1/13
1/12 2,3 0.083 0.052 2,3 1/14
1/13 13 0.076923 0.0473 15 1/15
1/14 2,7 0.0714285 0.04 2,7 1/16
1/15 3,5 0.06 0.0421 3,5 1/17
1/16 2 0.0625 0.04 2 1/20
1/17 17 0.0588235294117647 0.03607417 21 1/21
1/18 2,3 0.05 0.034 2,3 1/22
1/19 19 0.052631578947368421 0.032745 23 1/23
1/20 2,5 0.05 0.03146 2,5 1/24
1/21 3,7 0.047619 0.03 3,7 1/25
1/22 2,11 0.045 0.02721350564 2,13 1/26
1/23 23 0.0434782608695652173913 0.02620544131 27 1/27
1/24 2,3 0.0416 0.025 2,3 1/30
1/25 5 0.04 0.02436560507534121727 5 1/31
1/26 2,13 0.0384615 0.02354 2,15 1/32
1/27 3 0.037 0.022755 3 1/33
1/28 2,7 0.03571428 0.02 2,7 1/34
1/29 29 0.0344827586206896551724137931 0.0215173454106475626043236713 35 1/35
1/30 2,3,5 0.03 0.02104 2,3,5 1/36
1/31 31 0.032258064516129 0.02041 37 1/37
1/32 2 0.03125 0.02 2 1/40

Irrational numbers

[edit]

The table below gives the expansions of some commonirrational numbersin decimal and octal.

Number Positional representation
Decimal Octal
2(the length of thediagonalof a unitsquare) 1.414213562373095048... 1.3240 4746 3177 1674...
3(the length of the diagonal of a unitcube) 1.732050807568877293... 1.5666 3656 4130 2312...
5(the length of thediagonalof a 1×2rectangle) 2.236067977499789696... 2.1706 7363 3457 7224...
φ(phi, thegolden ratio=(1+5)/2) 1.618033988749894848... 1.4743 3571 5627 7512...
π(pi, the ratio ofcircumferencetodiameterof a circle) 3.141592653589793238462643
383279502884197169399375105...
3.1103 7552 4210 2643...
e(the base of thenatural logarithm) 2.718281828459045235... 2.5576 0521 3050 5355...

See also

[edit]

References

[edit]
  1. ^Leibniz, Gottfried Wilhelm (1703)."Explanation of binary arithmetic".leibniz-translations.Archivedfrom the original on 2021-02-11.Retrieved2022-03-02.
  2. ^Ascher, Marcia(1992). "Ethnomathematics: A Multicultural View of Mathematical Ideas".The College Mathematics Journal.23(4): 353–355.doi:10.2307/2686959.JSTOR2686959.
  3. ^Avelino, Heriberto (2006)."The typology of Pame number systems and the limits of Mesoamerica as a linguistic area"(PDF).Linguistic Typology.10(1): 41–60.doi:10.1515/LINGTY.2006.002.S2CID20412558.Archived(PDF)from the original on 2011-06-04.Retrieved2007-11-21.
  4. ^Winter, Werner (1991)."Some thoughts about Indo-European numerals".In Gvozdanović, Jadranka (ed.).Indo-European numerals.Trends in Linguistics. Vol. 57. Berlin: Mouton de Gruyter. pp. 13–14.ISBN3-11-011322-8.Archivedfrom the original on 2023-04-01.Retrieved2013-06-09.
  5. ^Wilkins, John (1668).An Essay Towards a Real Character and a Philosophical Language.London. p. 190.Archivedfrom the original on 2023-04-01.Retrieved2015-02-08.
  6. ^Donald Knuth,The Art of Computer Programming
  7. ^See H. R. Phalen, "Hugh Jones and Octave Computation,"The American Mathematical Monthly56 (August–September 1949): 461-465.
  8. ^James Anderson, On Octal Arithmetic [title appears only in page headers],Recreations in Agriculture, Natural-History, Arts, and Miscellaneous LiteratureArchived2023-04-01 at theWayback Machine,Vol. IV, No. 6 (February 1801), T. Bensley, London; pages 437-448.
  9. ^Alfred B. Taylor,Report on Weights and Measures,Pharmaceutical Association, 8th Annual Session, Boston, 1859-09-15. See pages 48 and 53.
  10. ^Alfred B. Taylor, Octonary numeration and its application to a system of weights and measures,Proc. Amer. Phil. Soc. Vol XXIVArchived2023-04-01 at theWayback Machine,Philadelphia, 1887; pages 296-366. See pages 327 and 330.
  11. ^"TB Code Sheet".Dr. Dobb's Journal of Computer Calisthenics & Orthodontia, Running Light Without Overbyte.1(1). December 1975.
  12. ^Microsoft Corporation (1987)."Constants, Variables, Expressions and Operators".GW-BASIC User's Manual.Archivedfrom the original on 2016-01-05.Retrieved2015-12-12.
  13. ^abc"2.4.1 Numeric Constants".CP/M-86 - Operating System - Programmer's Guide(PDF)(3 ed.). Pacific Grove, California, USA:Digital Research.January 1983 [1981]. p. 9.Archived(PDF)from the original on 2020-02-27.Retrieved2020-02-27.[1](1+viii+122+2 pages)
  14. ^Küveler, Gerd; Schwoch, Dietrich (2013) [1996].Arbeitsbuch Informatik - eine praxisorientierte Einführung in die Datenverarbeitung mit Projektaufgabe(in German). Vieweg-Verlag, reprint: Springer-Verlag.doi:10.1007/978-3-322-92907-5.ISBN978-3-528-04952-2.978-3-32292907-5.Archivedfrom the original on 2023-04-01.Retrieved2015-08-05.
  15. ^Küveler, Gerd; Schwoch, Dietrich (2007-10-04).Informatik für Ingenieure und Naturwissenschaftler: PC- und Mikrocomputertechnik, Rechnernetze(in German). Vol. 2 (5 ed.). Vieweg, reprint: Springer-Verlag.ISBN978-3-83489191-4.978-3-83489191-4.Archivedfrom the original on 2023-04-01.Retrieved2015-08-05.
  16. ^Paul, Matthias R. (1997-07-30)."NWDOS-TIPs — Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds".MPDOSTIP.Release 157 (in German) (3 ed.).Archivedfrom the original on 2016-11-04.Retrieved2014-08-06.(NB. NWDOSTIP.TXT is a comprehensive work onNovell DOS 7andOpenDOS 7.01,including the description of many undocumented features and internals. It is part of the author's yet largerMPDOSTIP.ZIPcollection maintained up to 2001 and distributed on many sites at the time. The provided link points to a HTML-converted older version of theNWDOSTIP.TXTfile.)
  17. ^Paul, Matthias R. (2002-03-26)."Updated CLS posted".freedos-dev mailing list.Archivedfrom the original on 2019-04-27.Retrieved2014-08-06.
  18. ^CCI Multiuser DOS 7.22 GOLD Online Documentation.Concurrent Controls, Inc.(CCI). 1997-02-10. HELP.HLP.
  19. ^"Haskell 98 Lexical Structure".Archivedfrom the original on 2021-04-11.Retrieved2019-11-01.
  20. ^OCaml:7.1 Lexical conventionsArchived2013-07-01 atarchive.today
  21. ^Python 3:https://docs. Python.org/3.1/reference/lexical_analysis.html#integer-literalsArchived2014-03-20 at theWayback Machine
  22. ^Perl 6:http://perlcabal.org/syn/S02.html#Radix_markersArchived31 October 2014 at theWayback Machine
  23. ^RubySpec:https://github /ruby/ruby/blob/master/spec/ruby/core/string/to_i_spec.rbArchived2022-05-29 at theWayback Machine
  24. ^Tcl:http://wiki.tcl.tk/498Archived2014-01-04 at theWayback Machine
  25. ^PHP.Watch - PHP 8.1: Explicit Octal numeral notationhttps://php.watch/versions/8.1/explicit-octal-notationArchived2021-01-08 at theWayback Machine
  26. ^Rust literals and operators:https://doc.rust-lang.org/rust-by-example/primitives/literals.htmlArchived2022-05-28 at theWayback Machine
  27. ^ECMAScript 6th Edition draft:https://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-numeric-literalsArchived16 December 2013 at theWayback Machine
  28. ^"Why does the radix for JavaScript's parseInt default to 8?".Stack Overflow.2011-04-08.Archivedfrom the original on 2020-08-06.Retrieved2019-08-21.
  29. ^"parseInt()",Mozilla Developer Network (MDN),archivedfrom the original on 2014-03-05,retrieved2014-01-03,If the input string begins with "0" (a zero), radix is assumed to be 8 (octal) or 10 (decimal). Exactly which radix is chosen is implementation-dependent. ECMAScript 5 clarifies that 10 (decimal) should be used, but not all browsers support this yet
[edit]