Float: Difference between revisions

From Avisynth wiki
Jump to navigationJump to search
Created page with "Float (or fully IEEE floating point with single precision) is one of the samples types of AviSynth's audio. For a converter see [http://www.h-schmidt.net/FloatConverter/IEEE75..."
 
Raffriff42 (talk | contribs)
Float audio range notes
 
(9 intermediate revisions by 2 users not shown)
Line 1: Line 1:
Float (or fully IEEE floating point with single precision) is one of the samples types of AviSynth's audio. For a converter see [http://www.h-schmidt.net/FloatConverter/IEEE754.html here].
''This page is about the ''Float ''audio format.'' <br>
:''For the variable type, see [[Script_variables]].'' <br>
:''For the'' <code>Float()</code> ''function, go to [[Internal_functions#Float]].'' <br>
:''For the {{Deep_color}} format, go to [[Float_(color_format)]]''
 
 
'''Float''' (or fully IEEE floating point with single precision) is one of the [[ConvertAudio|AviSynth audio sample formats]].
 
The samples of this type have normal values between -1.0 (= 0xBF800000) and +1.0 (= 0x3F800000). Values outside this range are usable as long as the audio remains in Float format, but will create audio clipping if [[ConvertAudio|converted]] to an integer format: 8, 16, 24 or 32 integer bits. For safety, you can call [[Normalize]] before converting from Float to Integer.
 
ColorBarsHD ## audio format = Float; range -1.0 - +1.0
Amplify(1000.0) ## range -1000.0 - +1000.0
Amplify(0.001) ## range -1.0 - +1.0
## output: unchanged
 
ColorBarsHD ## audio format = Float; range -1.0 - +1.0
Amplify(1000.0) ## range -1000.0 - +1000.0
ConvertAudioTo16bit ## convert to Integer; severe clipping
Amplify(0.001) ## still clipping


The samples of this type have values between -1.00000 (= 0xBF800000) and 1.000000 (= 0x3F800000).


The value of such a IEEE-754 number is computed as: sign * 2^exponent * 1.mantissa, using the following scheme:
The value of such a IEEE-754 number is computed as: sign * 2^exponent * 1.mantissa, using the following scheme:


[ 1 Sign Bit | 8 Bit Exponent  | 23 Bit Mantissa ]
<code>[ 1 Sign Bit | 8 Bit Exponent  | 23 Bit Mantissa ]</code>


* The sign bit is 1 (negative) or 0 (positive).
* The sign bit is 1 (negative) or 0 (positive).
* The exponent runs from -127 (00000000) to 0 (0111111) to 128 (11111111).  
* The exponent runs from -127 (00000000) to 0 (0111111) to 128 (11111111).  
* The mantissa m1m2m3 ... means m1/2 + m2/4 + m3/8 + ... in decimal. Sometimes people denote "1.m1m2m3..." as the mantissa (like is done in the converter above).
* The mantissa m1m2m3 ... means m1/2 + m2/4 + m3/8 + ... in decimal. Sometimes people denote "1.m1m2m3..." as the mantissa (like is done in the converter below).
 
For an on-line converter between decimal numbers and IEEE 754 floating point, see [http://www.h-schmidt.net/FloatConverter/IEEE754.html here].


Examples:
Examples:


  0x3F800000 = 00111111100000000000000000000000 (binary, see [http://easycalculation.]com/hex-converter.php)
  0x3F800000 = 00111111100000000000000000000000 (binary, see [http://easycalculation.com/hex-converter.php])
   
   
  Sign Bit      Exp      1.Mantissa
  Sign Bit      Exp      1.Mantissa
Line 24: Line 43:
and
and


0xBF800000 = 10111111100000000000000000000000
0xBF800000 = 10111111100000000000000000000000
   
   
  Sign Bit      Exp      1.Mantissa
  Sign Bit      Exp      1.Mantissa
Line 33: Line 52:
  Sign bit is negative, exponent = 0, 1.mantissa = 1, so the number is -1.0
  Sign bit is negative, exponent = 0, 1.mantissa = 1, so the number is -1.0


source: [http://www.opferman.net/Text/ieee.txt]
and
 
0x800000 = 01001011000000000000000000000000
Sign Bit      Exp      1.Mantissa
0          10010110  00000000000000000000000
150 - 127 = 23    1.0 bitshift 23 places
Sign bit is positive, exponent = 23, 1.mantissa = 1, so the number is 8388608
 
source: [https://web.archive.org/web/20120728135435/http://www.opferman.net/Text/ieee.txt opferman.net]


[[Category:Glossary]]
[[Category:Glossary]]

Latest revision as of 22:25, 28 October 2019

This page is about the Float audio format.

For the variable type, see Script_variables.
For the Float() function, go to Internal_functions#Float.
For the Deep Color format, go to Float_(color_format)


Float (or fully IEEE floating point with single precision) is one of the AviSynth audio sample formats.

The samples of this type have normal values between -1.0 (= 0xBF800000) and +1.0 (= 0x3F800000). Values outside this range are usable as long as the audio remains in Float format, but will create audio clipping if converted to an integer format: 8, 16, 24 or 32 integer bits. For safety, you can call Normalize before converting from Float to Integer.

ColorBarsHD ## audio format = Float; range -1.0 - +1.0
Amplify(1000.0) ## range -1000.0 - +1000.0
Amplify(0.001) ## range -1.0 - +1.0
## output: unchanged
ColorBarsHD ## audio format = Float; range -1.0 - +1.0
Amplify(1000.0) ## range -1000.0 - +1000.0
ConvertAudioTo16bit ## convert to Integer; severe clipping
Amplify(0.001) ## still clipping


The value of such a IEEE-754 number is computed as: sign * 2^exponent * 1.mantissa, using the following scheme:

[ 1 Sign Bit | 8 Bit Exponent | 23 Bit Mantissa ]

  • The sign bit is 1 (negative) or 0 (positive).
  • The exponent runs from -127 (00000000) to 0 (0111111) to 128 (11111111).
  • The mantissa m1m2m3 ... means m1/2 + m2/4 + m3/8 + ... in decimal. Sometimes people denote "1.m1m2m3..." as the mantissa (like is done in the converter below).

For an on-line converter between decimal numbers and IEEE 754 floating point, see here.

Examples:

0x3F800000 = 00111111100000000000000000000000 (binary, see [1])

Sign Bit      Exp       1.Mantissa
0          01111111  00000000000000000000000

127 - 127 = 0     1.0 bitshift 0 places

Sign bit is positive, exponent = 0, 1.mantissa = 1, so the number is +1.0

and

0xBF800000 = 10111111100000000000000000000000

Sign Bit      Exp       1.Mantissa
1          01111111  00000000000000000000000

127 - 127 = 0     1.0 bitshift 0 places

Sign bit is negative, exponent = 0, 1.mantissa = 1, so the number is -1.0

and

0x800000 = 01001011000000000000000000000000

Sign Bit      Exp       1.Mantissa
0          10010110  00000000000000000000000

150 - 127 = 23     1.0 bitshift 23 places

Sign bit is positive, exponent = 23, 1.mantissa = 1, so the number is 8388608

source: opferman.net