# Single.EpsilonSingle.EpsilonSingle.EpsilonSingle.Epsilon Field

## 定義

ゼロより大きい最小の Single 値を表します。Represents the smallest positive Single value that is greater than zero. このフィールドは定数です。This field is constant.

``public: float Epsilon = 1.401298E-45;``
``public const float Epsilon = 1.401298E-45;``
``val mutable Epsilon : single``
``Public Const Epsilon As Single  = 1.401298E-45``

## 注釈

Epsilonプロパティの値は、 Singleインスタンスの値がSingleゼロの場合に、数値演算または比較に有意な最小の正の値を反映します。The value of the Epsilon property reflects the smallest positive Single value that is significant in numeric operations or comparisons when the value of the Single instance is zero. たとえば、次のコードは、ゼロとEpsilonが等しくない値であると見なされ、のEpsilon値の0と半分が等しいと見なされることを示しています。For example, the following code shows that zero and Epsilon are considered to be unequal values, whereas zero and half the value of Epsilon are considered to be equal.

``````using System;

public class Example
{
public static void Main()
{
float[] values = { 0f, Single.Epsilon, Single.Epsilon * .5f };

for (int ctr = 0; ctr <= values.Length - 2; ctr++)
{
for (int ctr2 = ctr + 1; ctr2 <= values.Length - 1; ctr2++)
{
Console.WriteLine("{0:r} = {1:r}: {2}",
values[ctr], values[ctr2],
values[ctr].Equals(values[ctr2]));
}
Console.WriteLine();
}
}
}
// The example displays the following output:
//       0 = 1.401298E-45: False
//       0 = 0: True
//
//       1.401298E-45 = 0: False
``````
``````Module Example
Public Sub Main()
Dim values() As Single = { 0, Single.Epsilon, Single.Epsilon * .5 }

For ctr As Integer = 0 To values.Length - 2
For ctr2 As Integer = ctr + 1 To values.Length - 1
Console.WriteLine("{0:r} = {1:r}: {2}", _
values(ctr), values(ctr2), _
values(ctr).Equals(values(ctr2)))
Next
Console.WriteLine()
Next
End Sub
End Module
' The example displays the following output:
'       0 = 1.401298E-45: False
'       0 = 0: True
'
'       1.401298E-45 = 0: False
``````

より正確には、単精度浮動小数点形式は、符号、23ビットの仮数または有効桁、および8ビットの指数で構成されます。More precisely, the single-precision floating-point format consists of a sign, a 23-bit mantissa or significand, and an 8-bit exponent. 次の例に示すように、0の指数は-126、仮数は0です。As the following example shows, zero has an exponent of -126 and a mantissa of 0. Epsilonの指数部は-126、仮数は1です。Epsilon has an exponent of -126 and a mantissa of 1. これSingle.Epsilonは、が0より大きいSingle最小の正の値であり、可能な最小値を表し、指数が-126 Singleであるの最小値を表すことを意味します。This means that Single.Epsilon is the smallest positive Single value that is greater than zero and represents the smallest possible value and the smallest possible increment for a Single whose exponent is -126.

``````using System;

public class Example
{
public static void Main()
{
float[] values = { 0.0f, Single.Epsilon };
foreach (var value in values) {
Console.WriteLine(GetComponentParts(value));
Console.WriteLine();
}
}

private static string GetComponentParts(float value)
{
string result = String.Format("{0:R}: ", value);
int indent = result.Length;

// Convert the single to a 4-byte array.
byte[] bytes = BitConverter.GetBytes(value);
int formattedSingle = BitConverter.ToInt32(bytes, 0);

// Get the sign bit (byte 3, bit 7).
result += String.Format("Sign: {0}\n",
(formattedSingle >> 31) != 0 ? "1 (-)" : "0 (+)");

// Get the exponent (byte 2 bit 7 to byte 3, bits 6)
int exponent =  (formattedSingle >> 23) & 0x000000FF;
int adjustment = (exponent != 0) ? 127 : 126;
result += String.Format("{0}Exponent: 0x{1:X4} ({1})\n", new String(' ', indent), exponent - adjustment);

// Get the significand (bits 0-22)
long significand = exponent != 0 ?
((formattedSingle & 0x007FFFFF) | 0x800000) :
(formattedSingle & 0x007FFFFF);
result += String.Format("{0}Mantissa: 0x{1:X13}\n", new String(' ', indent), significand);
return result;
}
}
//       // The example displays the following output:
//       0: Sign: 0 (+)
//          Exponent: 0xFFFFFF82 (-126)
//          Mantissa: 0x0000000000000
//
//
//       1.401298E-45: Sign: 0 (+)
//                     Exponent: 0xFFFFFF82 (-126)
//                     Mantissa: 0x0000000000001
``````
``````Module Example
Public Sub Main()
Dim values() As Single = { 0.0, Single.Epsilon }
For Each value In values
Console.WriteLine(GetComponentParts(value))
Console.WriteLine()
Next
End Sub

Private Function GetComponentParts(value As Single) As String
Dim result As String =  String.Format("{0:R}: ", value)
Dim indent As Integer =  result.Length

' Convert the single to an 8-byte array.
Dim bytes() As Byte = BitConverter.GetBytes(value)
Dim formattedSingle As Integer = BitConverter.ToInt32(bytes, 0)

' Get the sign bit (byte 3, bit 7).
result += String.Format("Sign: {0}{1}",
If(formattedSingle >> 31 <> 0, "1 (-)", "0 (+)"),
vbCrLf)

' Get the exponent (byte 2 bit 7 to byte 3, bits 6)
Dim exponent As Integer =  (formattedSingle >> 23) And &h000000FF
Dim adjustment As Integer = If(exponent <> 0, 127, 126)
result += String.Format("{0}Exponent: 0x{1:X4} ({1}){2}",
New String(" "c, indent), exponent - adjustment,
vbCrLf)

' Get the significand (bits 0-22)
Dim significand As Long =  If(exponent <> 0,
(formattedSingle And &h007FFFFF) Or &h800000,
formattedSingle And &h007FFFFF)
result += String.Format("{0}Mantissa: 0x{1:X13}{2}",
New String(" "c, indent), significand, vbCrLf)

Return result
End Function
End Module
' The example displays the following output:
'       0: Sign: 0 (+)
'          Exponent: 0xFFFFFF82 (-126)
'          Mantissa: 0x0000000000000
'
'
'       1.401298E-45: Sign: 0 (+)
'                     Exponent: 0xFFFFFF82 (-126)
'                     Mantissa: 0x0000000000001
``````

ただし、 Epsilonプロパティは、 Single型の有効桁数の一般単位ではなく、値が 0 Singleのインスタンスにのみ適用されます。However, the Epsilon property is not a general measure of precision of the Single type; it applies only to Single instances that have a value of zero.

Epsilonプロパティの値は、浮動小数点演算の丸め処理による相対誤差の上限を表すコンピューターイプシロンと等価ではありません。The value of the Epsilon property is not equivalent to machine epsilon, which represents the upper bound of the relative error due to rounding in floating-point arithmetic.

この定数の値は、1.4 e-45 です。The value of this constant is 1.4e-45.

### プラットフォームに関する注意事項Platform Notes

ARM システムでは、 Epsilon定数の値が小さすぎて検出できないため、0になります。On ARM systems, the value of the Epsilon constant is too small to be detected, so it equates to zero. 代わりに、1.175494351 E-38 と等しい別のイプシロン値を定義できます。You can define an alternative epsilon value that equals 1.175494351E-38 instead.