Single Struct

Definitie

Vertegenwoordigt een drijvendekommagetal met enkele precisie.

public value class float : IComparable, IComparable<float>, IConvertible, IEquatable<float>, IFormattable
public value class float : IComparable<float>, IConvertible, IEquatable<float>, IParsable<float>, ISpanParsable<float>, IUtf8SpanParsable<float>, System::Numerics::IAdditionOperators<float, float, float>, System::Numerics::IAdditiveIdentity<float, float>, System::Numerics::IBinaryFloatingPointIeee754<float>, System::Numerics::IBinaryNumber<float>, System::Numerics::IBitwiseOperators<float, float, float>, System::Numerics::IComparisonOperators<float, float, bool>, System::Numerics::IDecrementOperators<float>, System::Numerics::IDivisionOperators<float, float, float>, System::Numerics::IEqualityOperators<float, float, bool>, System::Numerics::IExponentialFunctions<float>, System::Numerics::IFloatingPoint<float>, System::Numerics::IFloatingPointConstants<float>, System::Numerics::IFloatingPointIeee754<float>, System::Numerics::IHyperbolicFunctions<float>, System::Numerics::IIncrementOperators<float>, System::Numerics::ILogarithmicFunctions<float>, System::Numerics::IMinMaxValue<float>, System::Numerics::IModulusOperators<float, float, float>, System::Numerics::IMultiplicativeIdentity<float, float>, System::Numerics::IMultiplyOperators<float, float, float>, System::Numerics::INumber<float>, System::Numerics::INumberBase<float>, System::Numerics::IPowerFunctions<float>, System::Numerics::IRootFunctions<float>, System::Numerics::ISignedNumber<float>, System::Numerics::ISubtractionOperators<float, float, float>, System::Numerics::ITrigonometricFunctions<float>, System::Numerics::IUnaryNegationOperators<float, float>, System::Numerics::IUnaryPlusOperators<float, float>
public value class float : IComparable, IComparable<float>, IConvertible, IEquatable<float>, ISpanFormattable
public value class float : IComparable<float>, IConvertible, IEquatable<float>, IParsable<float>, ISpanParsable<float>, System::Numerics::IAdditionOperators<float, float, float>, System::Numerics::IAdditiveIdentity<float, float>, System::Numerics::IBinaryFloatingPointIeee754<float>, System::Numerics::IBinaryNumber<float>, System::Numerics::IBitwiseOperators<float, float, float>, System::Numerics::IComparisonOperators<float, float, bool>, System::Numerics::IDecrementOperators<float>, System::Numerics::IDivisionOperators<float, float, float>, System::Numerics::IEqualityOperators<float, float, bool>, System::Numerics::IExponentialFunctions<float>, System::Numerics::IFloatingPoint<float>, System::Numerics::IFloatingPointConstants<float>, System::Numerics::IFloatingPointIeee754<float>, System::Numerics::IHyperbolicFunctions<float>, System::Numerics::IIncrementOperators<float>, System::Numerics::ILogarithmicFunctions<float>, System::Numerics::IMinMaxValue<float>, System::Numerics::IModulusOperators<float, float, float>, System::Numerics::IMultiplicativeIdentity<float, float>, System::Numerics::IMultiplyOperators<float, float, float>, System::Numerics::INumber<float>, System::Numerics::INumberBase<float>, System::Numerics::IPowerFunctions<float>, System::Numerics::IRootFunctions<float>, System::Numerics::ISignedNumber<float>, System::Numerics::ISubtractionOperators<float, float, float>, System::Numerics::ITrigonometricFunctions<float>, System::Numerics::IUnaryNegationOperators<float, float>, System::Numerics::IUnaryPlusOperators<float, float>
public value class float : IComparable, IConvertible, IFormattable
public value class float : IComparable, IComparable<float>, IEquatable<float>, IFormattable
public struct Single : IComparable, IComparable<float>, IConvertible, IEquatable<float>, IFormattable
public readonly struct Single : IComparable<float>, IConvertible, IEquatable<float>, IParsable<float>, ISpanParsable<float>, IUtf8SpanParsable<float>, System.Numerics.IAdditionOperators<float,float,float>, System.Numerics.IAdditiveIdentity<float,float>, System.Numerics.IBinaryFloatingPointIeee754<float>, System.Numerics.IBinaryNumber<float>, System.Numerics.IBitwiseOperators<float,float,float>, System.Numerics.IComparisonOperators<float,float,bool>, System.Numerics.IDecrementOperators<float>, System.Numerics.IDivisionOperators<float,float,float>, System.Numerics.IEqualityOperators<float,float,bool>, System.Numerics.IExponentialFunctions<float>, System.Numerics.IFloatingPoint<float>, System.Numerics.IFloatingPointConstants<float>, System.Numerics.IFloatingPointIeee754<float>, System.Numerics.IHyperbolicFunctions<float>, System.Numerics.IIncrementOperators<float>, System.Numerics.ILogarithmicFunctions<float>, System.Numerics.IMinMaxValue<float>, System.Numerics.IModulusOperators<float,float,float>, System.Numerics.IMultiplicativeIdentity<float,float>, System.Numerics.IMultiplyOperators<float,float,float>, System.Numerics.INumber<float>, System.Numerics.INumberBase<float>, System.Numerics.IPowerFunctions<float>, System.Numerics.IRootFunctions<float>, System.Numerics.ISignedNumber<float>, System.Numerics.ISubtractionOperators<float,float,float>, System.Numerics.ITrigonometricFunctions<float>, System.Numerics.IUnaryNegationOperators<float,float>, System.Numerics.IUnaryPlusOperators<float,float>
public readonly struct Single : IComparable, IComparable<float>, IConvertible, IEquatable<float>, IFormattable
public readonly struct Single : IComparable, IComparable<float>, IConvertible, IEquatable<float>, ISpanFormattable
public readonly struct Single : IComparable<float>, IConvertible, IEquatable<float>, IParsable<float>, ISpanParsable<float>, System.Numerics.IAdditionOperators<float,float,float>, System.Numerics.IAdditiveIdentity<float,float>, System.Numerics.IBinaryFloatingPointIeee754<float>, System.Numerics.IBinaryNumber<float>, System.Numerics.IBitwiseOperators<float,float,float>, System.Numerics.IComparisonOperators<float,float,bool>, System.Numerics.IDecrementOperators<float>, System.Numerics.IDivisionOperators<float,float,float>, System.Numerics.IEqualityOperators<float,float,bool>, System.Numerics.IExponentialFunctions<float>, System.Numerics.IFloatingPoint<float>, System.Numerics.IFloatingPointConstants<float>, System.Numerics.IFloatingPointIeee754<float>, System.Numerics.IHyperbolicFunctions<float>, System.Numerics.IIncrementOperators<float>, System.Numerics.ILogarithmicFunctions<float>, System.Numerics.IMinMaxValue<float>, System.Numerics.IModulusOperators<float,float,float>, System.Numerics.IMultiplicativeIdentity<float,float>, System.Numerics.IMultiplyOperators<float,float,float>, System.Numerics.INumber<float>, System.Numerics.INumberBase<float>, System.Numerics.IPowerFunctions<float>, System.Numerics.IRootFunctions<float>, System.Numerics.ISignedNumber<float>, System.Numerics.ISubtractionOperators<float,float,float>, System.Numerics.ITrigonometricFunctions<float>, System.Numerics.IUnaryNegationOperators<float,float>, System.Numerics.IUnaryPlusOperators<float,float>
[System.Serializable]
public struct Single : IComparable, IConvertible, IFormattable
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public struct Single : IComparable, IComparable<float>, IConvertible, IEquatable<float>, IFormattable
public struct Single : IComparable, IComparable<float>, IEquatable<float>, IFormattable
type single = struct
    interface IConvertible
    interface IFormattable
type single = struct
    interface IConvertible
    interface IFormattable
    interface IParsable<single>
    interface ISpanFormattable
    interface ISpanParsable<single>
    interface IUtf8SpanFormattable
    interface IUtf8SpanParsable<single>
    interface IAdditionOperators<single, single, single>
    interface IAdditiveIdentity<single, single>
    interface IBinaryFloatingPointIeee754<single>
    interface IBinaryNumber<single>
    interface IBitwiseOperators<single, single, single>
    interface IComparisonOperators<single, single, bool>
    interface IEqualityOperators<single, single, bool>
    interface IDecrementOperators<single>
    interface IDivisionOperators<single, single, single>
    interface IIncrementOperators<single>
    interface IModulusOperators<single, single, single>
    interface IMultiplicativeIdentity<single, single>
    interface IMultiplyOperators<single, single, single>
    interface INumber<single>
    interface INumberBase<single>
    interface ISubtractionOperators<single, single, single>
    interface IUnaryNegationOperators<single, single>
    interface IUnaryPlusOperators<single, single>
    interface IExponentialFunctions<single>
    interface IFloatingPointConstants<single>
    interface IFloatingPoint<single>
    interface ISignedNumber<single>
    interface IFloatingPointIeee754<single>
    interface IHyperbolicFunctions<single>
    interface ILogarithmicFunctions<single>
    interface IPowerFunctions<single>
    interface IRootFunctions<single>
    interface ITrigonometricFunctions<single>
    interface IMinMaxValue<single>
type single = struct
    interface IConvertible
    interface ISpanFormattable
    interface IFormattable
type single = struct
    interface IConvertible
    interface IFormattable
    interface IParsable<single>
    interface ISpanFormattable
    interface ISpanParsable<single>
    interface IAdditionOperators<single, single, single>
    interface IAdditiveIdentity<single, single>
    interface IBinaryFloatingPointIeee754<single>
    interface IBinaryNumber<single>
    interface IBitwiseOperators<single, single, single>
    interface IComparisonOperators<single, single, bool>
    interface IEqualityOperators<single, single, bool>
    interface IDecrementOperators<single>
    interface IDivisionOperators<single, single, single>
    interface IIncrementOperators<single>
    interface IModulusOperators<single, single, single>
    interface IMultiplicativeIdentity<single, single>
    interface IMultiplyOperators<single, single, single>
    interface INumber<single>
    interface INumberBase<single>
    interface ISubtractionOperators<single, single, single>
    interface IUnaryNegationOperators<single, single>
    interface IUnaryPlusOperators<single, single>
    interface IExponentialFunctions<single>
    interface IFloatingPointConstants<single>
    interface IFloatingPoint<single>
    interface ISignedNumber<single>
    interface IFloatingPointIeee754<single>
    interface IHyperbolicFunctions<single>
    interface ILogarithmicFunctions<single>
    interface IPowerFunctions<single>
    interface IRootFunctions<single>
    interface ITrigonometricFunctions<single>
    interface IMinMaxValue<single>
type single = struct
    interface IConvertible
    interface IFormattable
    interface IParsable<single>
    interface ISpanFormattable
    interface ISpanParsable<single>
    interface IAdditionOperators<single, single, single>
    interface IAdditiveIdentity<single, single>
    interface IBinaryFloatingPointIeee754<single>
    interface IBinaryNumber<single>
    interface IBitwiseOperators<single, single, single>
    interface IComparisonOperators<single, single, bool>
    interface IEqualityOperators<single, single, bool>
    interface IDecrementOperators<single>
    interface IDivisionOperators<single, single, single>
    interface IIncrementOperators<single>
    interface IModulusOperators<single, single, single>
    interface IMultiplicativeIdentity<single, single>
    interface IMultiplyOperators<single, single, single>
    interface INumber<single>
    interface INumberBase<single>
    interface ISubtractionOperators<single, single, single>
    interface IUnaryNegationOperators<single, single>
    interface IUnaryPlusOperators<single, single>
    interface IUtf8SpanFormattable
    interface IUtf8SpanParsable<single>
    interface IExponentialFunctions<single>
    interface IFloatingPointConstants<single>
    interface IFloatingPoint<single>
    interface ISignedNumber<single>
    interface IFloatingPointIeee754<single>
    interface IHyperbolicFunctions<single>
    interface ILogarithmicFunctions<single>
    interface IPowerFunctions<single>
    interface IRootFunctions<single>
    interface ITrigonometricFunctions<single>
    interface IMinMaxValue<single>
[<System.Serializable>]
type single = struct
    interface IFormattable
    interface IConvertible
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type single = struct
    interface IFormattable
    interface IConvertible
type single = struct
    interface IFormattable
Public Structure Single
Implements IComparable, IComparable(Of Single), IConvertible, IEquatable(Of Single), IFormattable
Public Structure Single
Implements IAdditionOperators(Of Single, Single, Single), IAdditiveIdentity(Of Single, Single), IBinaryFloatingPointIeee754(Of Single), IBinaryNumber(Of Single), IBitwiseOperators(Of Single, Single, Single), IComparable(Of Single), IComparisonOperators(Of Single, Single, Boolean), IConvertible, IDecrementOperators(Of Single), IDivisionOperators(Of Single, Single, Single), IEqualityOperators(Of Single, Single, Boolean), IEquatable(Of Single), IExponentialFunctions(Of Single), IFloatingPoint(Of Single), IFloatingPointConstants(Of Single), IFloatingPointIeee754(Of Single), IHyperbolicFunctions(Of Single), IIncrementOperators(Of Single), ILogarithmicFunctions(Of Single), IMinMaxValue(Of Single), IModulusOperators(Of Single, Single, Single), IMultiplicativeIdentity(Of Single, Single), IMultiplyOperators(Of Single, Single, Single), INumber(Of Single), INumberBase(Of Single), IParsable(Of Single), IPowerFunctions(Of Single), IRootFunctions(Of Single), ISignedNumber(Of Single), ISpanParsable(Of Single), ISubtractionOperators(Of Single, Single, Single), ITrigonometricFunctions(Of Single), IUnaryNegationOperators(Of Single, Single), IUnaryPlusOperators(Of Single, Single), IUtf8SpanParsable(Of Single)
Public Structure Single
Implements IComparable, IComparable(Of Single), IConvertible, IEquatable(Of Single), ISpanFormattable
Public Structure Single
Implements IAdditionOperators(Of Single, Single, Single), IAdditiveIdentity(Of Single, Single), IBinaryFloatingPointIeee754(Of Single), IBinaryNumber(Of Single), IBitwiseOperators(Of Single, Single, Single), IComparable(Of Single), IComparisonOperators(Of Single, Single, Boolean), IConvertible, IDecrementOperators(Of Single), IDivisionOperators(Of Single, Single, Single), IEqualityOperators(Of Single, Single, Boolean), IEquatable(Of Single), IExponentialFunctions(Of Single), IFloatingPoint(Of Single), IFloatingPointConstants(Of Single), IFloatingPointIeee754(Of Single), IHyperbolicFunctions(Of Single), IIncrementOperators(Of Single), ILogarithmicFunctions(Of Single), IMinMaxValue(Of Single), IModulusOperators(Of Single, Single, Single), IMultiplicativeIdentity(Of Single, Single), IMultiplyOperators(Of Single, Single, Single), INumber(Of Single), INumberBase(Of Single), IParsable(Of Single), IPowerFunctions(Of Single), IRootFunctions(Of Single), ISignedNumber(Of Single), ISpanParsable(Of Single), ISubtractionOperators(Of Single, Single, Single), ITrigonometricFunctions(Of Single), IUnaryNegationOperators(Of Single, Single), IUnaryPlusOperators(Of Single, Single)
Public Structure Single
Implements IComparable, IConvertible, IFormattable
Public Structure Single
Implements IComparable, IComparable(Of Single), IEquatable(Of Single), IFormattable
Overname
Single
Kenmerken
Implementeringen
IComparable IComparable<Single> IConvertible IEquatable<Single> IFormattable IComparable<TSelf> IEquatable<TSelf> IParsable<Single> IParsable<TSelf> ISpanFormattable ISpanParsable<Single> ISpanParsable<TSelf> IUtf8SpanFormattable IUtf8SpanParsable<Single> IUtf8SpanParsable<TSelf> IAdditionOperators<Single,Single,Single> IAdditionOperators<TSelf,TSelf,TSelf> IAdditiveIdentity<Single,Single> IAdditiveIdentity<TSelf,TSelf> IBinaryFloatingPointIeee754<Single> IBinaryNumber<Single> IBinaryNumber<TSelf> IBitwiseOperators<Single,Single,Single> IBitwiseOperators<TSelf,TSelf,TSelf> IComparisonOperators<Single,Single,Boolean> IComparisonOperators<TSelf,TSelf,Boolean> IDecrementOperators<Single> IDecrementOperators<TSelf> IDivisionOperators<Single,Single,Single> IDivisionOperators<TSelf,TSelf,TSelf> IEqualityOperators<Single,Single,Boolean> IEqualityOperators<TSelf,TOther,TResult> IEqualityOperators<TSelf,TSelf,Boolean> IExponentialFunctions<Single> IExponentialFunctions<TSelf> IFloatingPoint<Single> IFloatingPoint<TSelf> IFloatingPointConstants<Single> IFloatingPointConstants<TSelf> IFloatingPointIeee754<Single> IFloatingPointIeee754<TSelf> IHyperbolicFunctions<Single> IHyperbolicFunctions<TSelf> IIncrementOperators<Single> IIncrementOperators<TSelf> ILogarithmicFunctions<Single> ILogarithmicFunctions<TSelf> IMinMaxValue<Single> IModulusOperators<Single,Single,Single> IModulusOperators<TSelf,TSelf,TSelf> IMultiplicativeIdentity<Single,Single> IMultiplicativeIdentity<TSelf,TSelf> IMultiplyOperators<Single,Single,Single> IMultiplyOperators<TSelf,TSelf,TSelf> INumber<Single> INumber<TSelf> INumberBase<Single> INumberBase<TSelf> IPowerFunctions<Single> IPowerFunctions<TSelf> IRootFunctions<Single> IRootFunctions<TSelf> ISignedNumber<Single> ISignedNumber<TSelf> ISubtractionOperators<Single,Single,Single> ISubtractionOperators<TSelf,TSelf,TSelf> ITrigonometricFunctions<Single> ITrigonometricFunctions<TSelf> IUnaryNegationOperators<Single,Single> IUnaryNegationOperators<TSelf,TSelf> IUnaryPlusOperators<Single,Single> IUnaryPlusOperators<TSelf,TSelf>

Opmerkingen

Het Single waardetype vertegenwoordigt een 32-bits getal met één precisie met waarden variërend van negatief 3.402823e38 tot positief 3,402823e38, evenals positieve of negatieve nul, PositiveInfinityen NegativeInfinityniet een getal (NaN). Het is bedoeld om waarden te vertegenwoordigen die extreem groot zijn (zoals afstanden tussen planeten of galaxies) of extreem klein (zoals de moleculaire massa van een stof in kilogram) en die vaak onnauwkeurig zijn (zoals de afstand van de aarde naar een ander zonnestelsel). Het Single type voldoet aan de IEC 60559:1989-standaard (IEEE 754) voor binaire zwevendekommaberekening.

System.Single biedt methoden voor het vergelijken van exemplaren van dit type, het converteren van de waarde van een exemplaar naar de tekenreeksweergave en het converteren van de tekenreeksweergave van een getal naar een exemplaar van dit type. Zie Opmaaktypen, Standaardtekenreeksen voor numerieke notatie en tekenreeksen voor aangepaste numerieke notatie voor meer informatie over hoe indelingsspecificatiecodes de tekenreeksweergave van waardetypen beheersen.

Weergave en precisie van drijvende komma

In het Single gegevenstype worden drijvendekommawaarden met enkele precisie opgeslagen in een 32-bits binaire indeling, zoals weergegeven in de volgende tabel:

Onderdeel Bits
Significand of mantissa 0-22
Exponent 23-30
Teken (0 = positief, 1 = negatief) 31

Net zoals decimale breuken bepaalde breuken niet precies kunnen weergeven (zoals 1/3 of Math.PI), kunnen binaire breuken bepaalde breuken niet vertegenwoordigen. Bijvoorbeeld 2/10, die precies wordt weergegeven door .2 als decimale breuk, wordt vertegenwoordigd door .0011111001001100 als een binaire breuk, waarbij het patroon "1100" wordt herhaald tot oneindig. In dit geval biedt de zwevendekommavalue een onnauwkeurige weergave van het getal dat het vertegenwoordigt. Extra wiskundige bewerkingen uitvoeren op het oorspronkelijke kommagetal vermindert vaak de precisie. Als u bijvoorbeeld de resultaten van het vermenigvuldigen van .3 met 10 vergelijkt en .3 negen keer toevoegt aan ,3, ziet u dat optellen het minder nauwkeurige resultaat oplevert, omdat het acht meer bewerkingen dan vermenigvuldiging omvat. Houd er rekening mee dat deze verschillen alleen zichtbaar zijn als u de twee Single waarden weergeeft met behulp van de standaardtekenreeks voor numerieke R-notatie, die, indien nodig, alle 9 cijfers van precisie weergeeft die door het Single type worden ondersteund.

using System;

public class Example12
{
    public static void Main()
    {
        Single value = .2f;
        Single result1 = value * 10f;
        Single result2 = 0f;
        for (int ctr = 1; ctr <= 10; ctr++)
            result2 += value;

        Console.WriteLine($".2 * 10:           {result1:R}");
        Console.WriteLine($".2 Added 10 times: {result2:R}");
    }
}
// The example displays the following output:
//       .2 * 10:           2
//       .2 Added 10 times: 2.0000002
let value = 0.2f
let result1 = value * 10f
let mutable result2 = 0f
for _ = 1 to 10 do
    result2 <- result2 + value

printfn $".2 * 10:           {result1:R}"
printfn $".2 Added 10 times: {result2:R}"
// The example displays the following output:
//       .2 * 10:           2
//       .2 Added 10 times: 2.00000024
Module Example13
    Public Sub Main()
        Dim value As Single = 0.2
        Dim result1 As Single = value * 10
        Dim result2 As Single
        For ctr As Integer = 1 To 10
            result2 += value
        Next
        Console.WriteLine(".2 * 10:           {0:R}", result1)
        Console.WriteLine(".2 Added 10 times: {0:R}", result2)
    End Sub
End Module

' The example displays the following output:
'       .2 * 10:           2
'       .2 Added 10 times: 2.0000002

Omdat sommige getallen niet exact als fractionele binaire waarden kunnen worden weergegeven, kunnen getallen met drijvende komma alleen reële getallen bij benadering bevatten.

Alle getallen met een drijvende komma hebben een beperkt aantal significante decimalen, dat ook bepaalt hoe nauwkeurig een drijvendekommagetal een reëel getal benadert. Een Single waarde heeft maximaal 7 decimale cijfers van precisie, hoewel een maximum van 9 cijfers intern wordt bijgehouden. Dit betekent dat sommige drijvendekommabewerkingen mogelijk niet de precisie hebben om een drijvende-kommawaarde te wijzigen. In het volgende voorbeeld wordt een grote drijvendekommagetalwaarde met één precisie gedefinieerd en wordt vervolgens het product van Single.Epsilon en één quadrillion hieraan toegevoegd. Het product is echter te klein om de oorspronkelijke zwevendekommawaarde te wijzigen. Het kleinste significante cijfer is duizendde, terwijl het belangrijkste cijfer in het product 10-30 is.

using System;

public class Example13
{
    public static void Main()
    {
        Single value = 123.456f;
        Single additional = Single.Epsilon * 1e15f;
        Console.WriteLine($"{value} + {additional} = {value + additional}");
    }
}

// The example displays the following output:
//    123.456 + 1.401298E-30 = 123.456
open System

let value = 123.456f
let additional = Single.Epsilon * 1e15f
printfn $"{value} + {additional} = {value + additional}"
// The example displays the following output:
//    123.456 + 1.401298E-30 = 123.456
Module Example
   Public Sub Main()
      Dim value As Single = 123.456
      Dim additional As Single = Single.Epsilon * 1e15
      Console.WriteLine($"{value} + {additional} = {value + additional}")
   End Sub
End Module
' The example displays the following output:
'   123.456 + 1.401298E-30 = 123.456

De beperkte precisie van een drijvende-komma-getal heeft verschillende gevolgen.

  • Twee zwevende kommanummers die voor een bepaalde precisie gelijk lijken, kunnen mogelijk niet gelijk worden vergeleken omdat hun minst significante cijfers verschillen. In het volgende voorbeeld worden een reeks getallen bij elkaar opgeteld en wordt het totaal vergeleken met het verwachte totaal. Een aanroep naar de Equals methode geeft aan dat de waarden niet gelijk zijn.

    using System;
    
    public class PrecisionList3Example
    {
        public static void Main()
        {
            Single[] values = { 10.01f, 2.88f, 2.88f, 2.88f, 9.0f };
            Single result = 27.65f;
            Single total = 0f;
            foreach (var value in values)
                total += value;
    
            if (total.Equals(result))
                Console.WriteLine("The sum of the values equals the total.");
            else
                Console.WriteLine($"The sum of the values ({total}) does not equal the total ({result}).");
        }
    }
    
    // The example displays the following output on .NET:
    //      The sum of the values (27.650002) does not equal the total (27.65).
    // The example displays the following output on .NET Framework:
    //      The sum of the values (27.65) does not equal the total (27.65).
    
    let values = [| 10.01f; 2.88f; 2.88f; 2.88f; 9f |]
    let result = 27.65f
    let mutable total = 0f
    for value in values do
        total <- total + value
    
    if total.Equals result then
        printfn "The sum of the values equals the total."
    else
        printfn "The sum of the values ({total}) does not equal the total ({result})."
    // The example displays the following output:
    //      The sum of the values (27.65) does not equal the total (27.65).   
    //
    // If the index items in the Console.WriteLine statement are changed to {0:R},
    // the example displays the following output:
    //       The sum of the values (27.6500015) does not equal the total (27.65).
    
        Dim values() As Single = {10.01, 2.88, 2.88, 2.88, 9.0}
        Dim result As Single = 27.65
        Dim total As Single
        For Each value In values
            total += value
        Next
        If total.Equals(result) Then
            Console.WriteLine("The sum of the values equals the total.")
        Else
            Console.WriteLine($"The sum of the values ({total}) does not equal the total ({result}).")
        End If
    End Sub
    
    ' The example displays the following output on .NET:
    '      The sum of the values (27.650002) does not equal the total (27.65).
    ' The example displays the following output on .NET Framework:
    '      The sum of the values (27.65) does not equal the total (27.65).
    

    De twee waarden zijn ongelijk vanwege een verlies van precisie tijdens de optellingsbewerkingen. In dit geval kan het probleem worden opgelost door de Math.Round(Double, Int32) methode aan te roepen om de Single waarden naar de gewenste precisie te afronden voordat de vergelijking wordt uitgevoerd.

  • Een wiskundige of vergelijkingsbewerking die gebruikmaakt van een drijvendekommagetal levert mogelijk niet hetzelfde resultaat op als een decimaal getal wordt gebruikt, omdat het binaire drijvendekommagetal mogelijk niet gelijk is aan het decimale getal. Een eerder voorbeeld illustreerde dit door het resultaat weer te geven van het vermenigvuldigen van .3 met 10 en het toevoegen van .3 aan .3 negen keer.

    Wanneer nauwkeurigheid in numerieke bewerkingen met breukwaarden belangrijk is, gebruikt u het Decimal type in plaats van het Single type. Wanneer nauwkeurigheid in numerieke bewerkingen met integrale waarden buiten het bereik van de Int64 of UInt64 typen belangrijk is, gebruikt u het BigInteger type.

  • Single waarden hebben minder precisie dan Double waarden. Een Single waarde die wordt geconverteerd naar een schijnbaar equivalent Double , komt vaak niet overeen met de Double waarde vanwege verschillen in precisie. In het volgende voorbeeld wordt het resultaat van identieke delingsbewerkingen toegewezen aan een Double waarde en een Single waarde. Nadat de Single waarde is omgezet in een Double, geeft een vergelijking van de twee waarden aan dat ze ongelijk zijn.

    using System;
    
    public class Example9
    {
        public static void Run()
        {
            double value1 = 1 / 3.0;
            float sValue2 = 1 / 3.0f;
            double value2 = (double)sValue2;
            Console.WriteLine($"{value1:R} = {value2:R}: {value1.Equals(value2)}");
        }
    }
    
    // The example displays the following output:
    //        0.33333333333333331 = 0.3333333432674408: False
    
    open System
    
    let value1 = 1. / 3.
    let sValue2 = 1f /3f
    
    let value2 = double sValue2
    printfn $"{value1:R} = {value2:R}: {value1.Equals value2}"
    // The example displays the following output:
    //        0.33333333333333331 = 0.3333333432674408: False
    
    Module Example10
        Public Sub Run()
            Dim value1 As Double = 1 / 3
            Dim sValue2 As Single = 1 / 3
            Dim value2 As Double = CDbl(sValue2)
            Console.WriteLine("{0} = {1}: {2}", value1, value2, value1.Equals(value2))
        End Sub
    End Module
    ' The example displays the following output:
    '       0.33333333333333331 = 0.3333333432674408: False
    

    Om dit probleem te voorkomen, gebruikt u het Double gegevenstype in plaats van het Single gegevenstype of gebruikt u de Round methode zodat beide waarden dezelfde precisie hebben.

Testen op gelijkheid

Om als gelijk te worden beschouwd, moeten twee Single waarden identieke waarden vertegenwoordigen. Vanwege verschillen in precisie tussen waarden, of vanwege een verlies van precisie door een of beide waarden, blijken drijvende-kommawaarden die naar verwachting identiek zijn, vaak ongelijk vanwege verschillen in hun minst significante cijfers. Als gevolg hiervan worden aanroepen naar de Equals methode aangeroepen om te bepalen of twee waarden gelijk zijn, of aanroepen naar de methode om de CompareTo relatie tussen twee Single waarden te bepalen, leveren vaak onverwachte resultaten op. Dit is duidelijk in het volgende voorbeeld, waarbij twee schijnbaar gelijke Single waarden ongelijk blijken te zijn, omdat de eerste waarde 7 cijfers precisie heeft, terwijl de tweede waarde 9 heeft.

using System;

public class Example
{
   public static void Main()
   {
      float value1 = .3333333f;
      float value2 = 1.0f/3;
      Console.WriteLine($"{value1:R} = {value2:R}: {value1.Equals(value2)}");
   }
}
// The example displays the following output:
//        0.3333333 = 0.333333343: False
let value1 = 0.3333333f
let value2 = 1f / 3f
printfn $"{value1:R} = {value2:R}: {value1.Equals value2}"
// The example displays the following output:
//        0.3333333 = 0.333333343: False
Module Example1
    Public Sub Main()
        Dim value1 As Single = 0.3333333
        Dim value2 As Single = 1 / 3
        Console.WriteLine("{0:R} = {1:R}: {2}", value1, value2, value1.Equals(value2))
    End Sub
End Module
' The example displays the following output:
'       0.3333333 = 0.333333343: False

Berekende waarden die verschillende codepaden volgen en die op verschillende manieren worden gemanipuleerd, blijken vaak ongelijk te zijn. In het volgende voorbeeld wordt één Single waarde ge kwadrateerd en wordt vervolgens de vierkantswortel berekend om de oorspronkelijke waarde te herstellen. Een tweede Single wordt vermenigvuldigd met 3,51 en gekwardateerd voordat de vierkantswortel van het resultaat wordt gedeeld door 3,51 om de originele waarde terug te krijgen. Hoewel de twee waarden identiek lijken te zijn, geeft een aanroep van de Equals(Single) methode aan dat ze niet gelijk zijn.

float value1 = 10.201438f;
value1 = (float)Math.Sqrt((float)Math.Pow(value1, 2));
float value2 = (float)Math.Pow((float)value1 * 3.51f, 2);
value2 = ((float)Math.Sqrt(value2)) / 3.51f;
Console.WriteLine($"{value1} = {value2}: {value1.Equals(value2)}");

// The example displays the following output on .NET:
//       10.201438 = 10.201439: False
// The example displays the following output on .NET Framework:
//       10.20144 = 10.20144: False
let value1 = 
    10.201438f ** 2f
    |> sqrt

let value2 =
   ((value1 * 3.51f) ** 2f |> sqrt) / 3.51f

printfn $"{value1} = {value2}: {value1.Equals value2}\n" 
printfn $"{value1:G9} = {value2:G9}"
// The example displays the following output:
//       10.20144 = 10.20144: False
//       
//       10.201438 = 10.2014389
Dim value1 As Single = 10.201438
value1 = CSng(Math.Sqrt(CSng(Math.Pow(value1, 2))))
Dim value2 As Single = CSng(Math.Pow(value1 * CSng(3.51), 2))
value2 = CSng(Math.Sqrt(value2) / CSng(3.51))
Console.WriteLine("{0} = {1}: {2}",
                value1, value2, value1.Equals(value2))

' The example displays the following output on .NET:
'       10.201438 = 10.201439: False
' The example displays the following output on .NET Framework:
'       10.20144 = 10.20144: False

In gevallen waarin een verlies van precisie waarschijnlijk van invloed is op het resultaat van een vergelijking, kunt u de volgende technieken gebruiken in plaats van de Equals of CompareTo methode aan te roepen:

  • Roep de Math.Round methode aan om ervoor te zorgen dat beide waarden dezelfde precisie hebben. In het volgende voorbeeld wordt een eerder voorbeeld gewijzigd om deze methode te gebruiken, zodat twee breukwaarden gelijkwaardig zijn.

    float value1 = .3333333f;
    float value2 = 1.0f / 3;
    int precision = 7;
    value1 = (float)Math.Round(value1, precision);
    value2 = (float)Math.Round(value2, precision);
    Console.WriteLine($"{value1:R} = {value2:R}: {value1.Equals(value2)}");
    
    // The example displays the following output:
    //        0.3333333 = 0.3333333: True
    
    open System
    
    let value1 = 0.3333333f
    let value2 = 1f / 3f
    let precision = 7
    let value1r = Math.Round(float value1, precision) |> float32
    let value2r = Math.Round(float value2, precision) |> float32
    printfn $"{value1:R} = {value2:R}: {value1.Equals value2}"
    // The example displays the following output:
    //        0.3333333 = 0.3333333: True
    
    Module Example3
        Public Sub Main()
            Dim value1 As Single = 0.3333333
            Dim value2 As Single = 1 / 3
            Dim precision As Integer = 7
            value1 = CSng(Math.Round(value1, precision))
            value2 = CSng(Math.Round(value2, precision))
            Console.WriteLine("{0:R} = {1:R}: {2}", value1, value2, value1.Equals(value2))
        End Sub
    End Module
    ' The example displays the following output:
    '       0.3333333 = 0.3333333: True
    

    Het probleem van precisie is nog steeds van toepassing op het afronden van middelpuntwaarden. Zie de Math.Round(Double, Int32, MidpointRounding) methode voor meer informatie.

  • Test op benaderde gelijkheid in plaats van gelijkheid. Voor deze techniek moet u een absoluut bedrag definiëren waarmee de twee waarden kunnen verschillen, maar nog steeds gelijk zijn, of dat u een relatief bedrag definieert waarmee de kleinere waarde kan afwijken van de grotere waarde.

    Warning

    Single.Epsilon wordt soms gebruikt als een absolute meting van de afstand tussen twee Single waarden bij het testen op gelijkheid. Single.Epsilon Meet echter de kleinste mogelijke waarde die kan worden toegevoegd aan of afgetrokken van, waarvan de Single waarde nul is. Voor de meeste positieve en negatieve Single waarden is de waarde Single.Epsilon te klein om te worden gedetecteerd. Daarom, met uitzondering van waarden die nul zijn, raden we het gebruik ervan niet aan in tests voor gelijkheid.

    In het volgende voorbeeld wordt de laatste methode gebruikt om een IsApproximatelyEqual methode te definiëren waarmee het relatieve verschil tussen twee waarden wordt getest. Het contrasteert ook het resultaat van aanroepen naar de IsApproximatelyEqual methode en de Equals(Single) methode.

    public static void Main()
    {
        float one1 = .1f * 10;
        float one2 = 0f;
        for (int ctr = 1; ctr <= 10; ctr++)
            one2 += .1f;
    
        Console.WriteLine($"{one1:R} = {one2:R}: {one1.Equals(one2)}");
        Console.WriteLine($"{one1:R} is approximately equal to {one2:R}: " +
            $"{IsApproximatelyEqual(one1, one2, .000001f)}");
    
        float negativeOne1 = -1 * one1;
        float negativeOne2 = -1 * one2;
    
        Console.WriteLine($"{negativeOne1:R} = {negativeOne2:R}: {negativeOne1.Equals(negativeOne2)}");
        Console.WriteLine($"{negativeOne1:R} is approximately equal to {negativeOne2:R}: " +
            $"{IsApproximatelyEqual(negativeOne1, negativeOne2, .000001f)}");
    }
    
    static bool IsApproximatelyEqual(float value1, float value2, float epsilon)
    {
        // If they are equal anyway, just return True.
        if (value1.Equals(value2))
            return true;
    
        // Handle NaN, Infinity.
        if (Double.IsInfinity(value1) | Double.IsNaN(value1))
            return value1.Equals(value2);
        else if (Double.IsInfinity(value2) | Double.IsNaN(value2))
            return value1.Equals(value2);
    
        // Handle zero to avoid division by zero.
        double divisor = Math.Max(value1, value2);
        if (divisor.Equals(0))
            divisor = Math.Min(value1, value2);
    
        return Math.Abs((value1 - value2) / divisor) <= epsilon;
    }
    
    // The example displays the following output on .NET:
    //       1 = 1.0000001: False
    //       1 is approximately equal to 1.0000001: True
    //       -1 = -1.0000001: False
    //       -1 is approximately equal to -1.0000001: True
    
    open System
    
    let isApproximatelyEqual value1 value2 epsilon =
        // If they are equal anyway, just return True.
        if value1.Equals value2 then 
            true
        // Handle NaN, Infinity.
        elif Single.IsInfinity value1 || Single.IsNaN value1 then
            value1.Equals value2
        elif Single.IsInfinity value2 || Single.IsNaN value2 then
            value1.Equals value2
        else
            // Handle zero to avoid division by zero
            let divisor = max value1 value2
            let divisor = 
                if divisor.Equals 0 then
                    min value1 value2
                else divisor
            abs (value1 - value2) / divisor <= epsilon           
    
    
    let one1 = 0.1f * 10f
    let mutable one2 = 0f
    for _ = 1 to 10 do
       one2 <- one2 + 0.1f
    
    printfn $"{one1:R} = {one2:R}: {one1.Equals one2}"
    printfn $"{one1:R} is approximately equal to {one2:R}: {isApproximatelyEqual one1 one2 0.000001f}" 
    // The example displays the following output:
    //       1 = 1.00000012: False
    //       1 is approximately equal to 1.00000012: True
    
    Public Sub Main()
        Dim one1 As Single = 0.1 * 10
        Dim one2 As Single = 0
        For ctr As Integer = 1 To 10
            one2 += CSng(0.1)
        Next
        Console.WriteLine("{0:R} = {1:R}: {2}", one1, one2, one1.Equals(one2))
        Console.WriteLine("{0:R} is approximately equal to {1:R}: {2}",
                        one1, one2,
                        IsApproximatelyEqual(one1, one2, 0.000001))
    End Sub
    
    Function IsApproximatelyEqual(value1 As Single, value2 As Single,
                                 epsilon As Single) As Boolean
        ' If they are equal anyway, just return True.
        If value1.Equals(value2) Then Return True
    
        ' Handle NaN, Infinity.
        If Single.IsInfinity(value1) Or Single.IsNaN(value1) Then
            Return value1.Equals(value2)
        ElseIf Single.IsInfinity(value2) Or Single.IsNaN(value2) Then
            Return value1.Equals(value2)
        End If
    
        ' Handle zero to avoid division by zero.
        Dim divisor As Single = Math.Max(value1, value2)
        If divisor.Equals(0) Then
            divisor = Math.Min(value1, value2)
        End If
    
        Return Math.Abs(value1 - value2) / divisor <= epsilon
    End Function
    
    ' The example displays the following output:
    '       1 = 1.0000001: False
    '       1 is approximately equal to 1.0000001: True
    

Waarden en uitzonderingen voor drijvende komma

Bewerkingen met drijvende-komma waarden werpen geen uitzonderingen op, in tegenstelling tot bewerkingen met gehele typen, die uitzonderingen werpen bij illegale operaties, zoals delen door nul of overloop. In plaats daarvan is het resultaat van een drijvendekommabewerking in deze situaties nul, positieve oneindigheid, negatieve oneindigheid of geen getal (NaN).

  • Als het resultaat van een drijvende-kommabewerking te klein is voor de doelindeling, is het resultaat nul. Dit kan gebeuren wanneer twee zeer kleine drijvendekommanummers worden vermenigvuldigd, zoals in het volgende voorbeeld wordt weergegeven.

    float value1 = 1.163287e-36f;
    float value2 = 9.164234e-25f;
    float result = value1 * value2;
    Console.WriteLine($"{value1} * {value2} = {result}");
    Console.WriteLine($"{result} = 0: {result.Equals(0.0f)}");
    
    // The example displays the following output:
    //       1.163287E-36 * 9.164234E-25 = 0
    //       0 = 0: True
    
    let value1 = 1.163287e-36f
    let value2 = 9.164234e-25f
    let result = value1 * value2
    printfn $"{value1} * {value2} = {result}"
    printfn $"{result} = 0: {result.Equals(0f)}"
    // The example displays the following output:
    //       1.163287E-36 * 9.164234E-25 = 0
    //       0 = 0: True
    
    Module Example7
        Public Sub Main()
            Dim value1 As Single = 1.163287E-36
            Dim value2 As Single = 9.164234E-25
            Dim result As Single = value1 * value2
            Console.WriteLine("{0} * {1} = {2:R}", value1, value2, result)
            Console.WriteLine("{0} = 0: {1}", result, result.Equals(0))
        End Sub
    End Module
    ' The example displays the following output:
    '       1.163287E-36 * 9.164234E-25 = 0
    '       0 = 0: True
    
  • Als de grootte van het resultaat van een drijvendekommabewerking het bereik van het bestemmingsformaat overschrijdt, is het resultaat van de bewerking PositiveInfinity of NegativeInfinity, afhankelijk van het teken van het resultaat. Het resultaat van een bewerking die overloopt Single.MaxValue is PositiveInfinity, en het resultaat van een bewerking die overloopt Single.MinValue is NegativeInfinity, zoals het volgende voorbeeld laat zien.

    float value1 = 3.065e35f;
    float value2 = 6.9375e32f;
    float result = value1 * value2;
    Console.WriteLine($"PositiveInfinity: {Single.IsPositiveInfinity(result)}");
    Console.WriteLine($"NegativeInfinity: {Single.IsNegativeInfinity(result)}");
    Console.WriteLine();
    
    value1 = -value1;
    result = value1 * value2;
    Console.WriteLine($"PositiveInfinity: {Single.IsPositiveInfinity(result)}");
    Console.WriteLine($"NegativeInfinity: {Single.IsNegativeInfinity(result)}");
    
    // The example displays the following output:
    //       PositiveInfinity: True
    //       NegativeInfinity: False
    //
    //       PositiveInfinity: False
    //       NegativeInfinity: True
    
    open System
    
    let value1 = 3.065e35f
    let value2 = 6.9375e32f
    let result = value1 * value2
    printfn $"PositiveInfinity: {Single.IsPositiveInfinity result}" 
    printfn $"NegativeInfinity: {Single.IsNegativeInfinity result}\n"
    
    let value3 = -value1
    let result2 = value3 * value2
    printfn $"PositiveInfinity: {Single.IsPositiveInfinity result}" 
    printfn $"NegativeInfinity: {Single.IsNegativeInfinity result}" 
    
    // The example displays the following output:
    //       PositiveInfinity: True
    //       NegativeInfinity: False
    //       
    //       PositiveInfinity: False
    //       NegativeInfinity: True
    
    Module Example8
        Public Sub Main()
            Dim value1 As Single = 3.065E+35
            Dim value2 As Single = 6.9375E+32
            Dim result As Single = value1 * value2
            Console.WriteLine("PositiveInfinity: {0}",
                             Single.IsPositiveInfinity(result))
            Console.WriteLine("NegativeInfinity: {0}",
                            Single.IsNegativeInfinity(result))
            Console.WriteLine()
            value1 = -value1
            result = value1 * value2
            Console.WriteLine("PositiveInfinity: {0}",
                             Single.IsPositiveInfinity(result))
            Console.WriteLine("NegativeInfinity: {0}",
                            Single.IsNegativeInfinity(result))
        End Sub
    End Module
    ' The example displays the following output:
    '       PositiveInfinity: True
    '       NegativeInfinity: False
    '       
    '       PositiveInfinity: False
    '       NegativeInfinity: True
    

    PositiveInfinity is ook het resultaat van een deling door nul met een positief dividend, en NegativeInfinity is het resultaat van een deling door nul met een negatief dividend.

  • Als een zwevende-komma-operatie ongeldig is, is NaN het resultaat van de bewerking. Bijvoorbeeld resultaten NaN van de volgende bewerkingen:

    • Delen door nul met een dividend van nul. Houd er rekening mee dat andere gevallen van deling door nul resulteren in PositiveInfinity of NegativeInfinity.
    • Elke drijvendekommabewerking met ongeldige invoer. Als u bijvoorbeeld probeert de vierkantswortel van een negatieve waarde te vinden, geeft dit NaN terug.
    • Elke bewerking met een argument waarvan de waarde is Single.NaN.

Typeconversies

De Single structuur definieert geen expliciete of impliciete conversieoperators. In plaats daarvan worden conversies geïmplementeerd door de compiler.

De volgende tabel bevat de mogelijke conversies van een waarde van de andere primitieve numerieke typen naar een Single waarde. Ook wordt aangegeven of de conversie breder of smaller wordt en of het resulterende Single resultaat minder precisie heeft dan de oorspronkelijke waarde.

Conversie van Verbreden/versmallen Mogelijk verlies van precisie
Byte Verbreding No
Decimal Verbreding

Let op dat voor C# een cast-operator vereist is.
Yes. Decimal ondersteunt 29 decimale cijfers van precisie; Single ondersteunt 9.
Double Vernauwing; buiten bereikwaarden worden geconverteerd naar Double.NegativeInfinity of Double.PositiveInfinity. Yes. Double ondersteunt 17 decimale cijfers van precisie; Single ondersteunt 9.
Int16 Verbreding No
Int32 Verbreding Yes. Int32 ondersteunt 10 decimale cijfers van precisie; Single ondersteunt 9.
Int64 Verbreding Yes. Int64 ondersteunt 19 decimale cijfers van precisie; Single ondersteunt 9.
SByte Verbreding No
UInt16 Verbreding No
UInt32 Verbreding Yes. UInt32 ondersteunt 10 decimale cijfers van precisie; Single ondersteunt 9.
UInt64 Verbreding Yes. Int64 ondersteunt 20 decimale cijfers van precisie; Single ondersteunt 9.

In het volgende voorbeeld wordt de minimum- of maximumwaarde van andere primitieve numerieke typen geconverteerd naar een Single waarde.

using System;

public class Example4
{
    public static void Main()
    {
        dynamic[] values = { Byte.MinValue, Byte.MaxValue, Decimal.MinValue,
                           Decimal.MaxValue, Double.MinValue, Double.MaxValue,
                           Int16.MinValue, Int16.MaxValue, Int32.MinValue,
                           Int32.MaxValue, Int64.MinValue, Int64.MaxValue,
                           SByte.MinValue, SByte.MaxValue, UInt16.MinValue,
                           UInt16.MaxValue, UInt32.MinValue, UInt32.MaxValue,
                           UInt64.MinValue, UInt64.MaxValue };
        float sngValue;
        foreach (var value in values)
        {
            if (value.GetType() == typeof(Decimal) ||
                value.GetType() == typeof(Double))
                sngValue = (float)value;
            else
                sngValue = value;
            Console.WriteLine($"{value} ({value.GetType().Name}) --> {sngValue:R} ({sngValue.GetType().Name})");
        }
    }
}
// The example displays the following output:
//       0 (Byte) --> 0 (Single)
//       255 (Byte) --> 255 (Single)
//       -79228162514264337593543950335 (Decimal) --> -7.92281625E+28 (Single)
//       79228162514264337593543950335 (Decimal) --> 7.92281625E+28 (Single)
//       -1.79769313486232E+308 (Double) --> -Infinity (Single)
//       1.79769313486232E+308 (Double) --> Infinity (Single)
//       -32768 (Int16) --> -32768 (Single)
//       32767 (Int16) --> 32767 (Single)
//       -2147483648 (Int32) --> -2.14748365E+09 (Single)
//       2147483647 (Int32) --> 2.14748365E+09 (Single)
//       -9223372036854775808 (Int64) --> -9.223372E+18 (Single)
//       9223372036854775807 (Int64) --> 9.223372E+18 (Single)
//       -128 (SByte) --> -128 (Single)
//       127 (SByte) --> 127 (Single)
//       0 (UInt16) --> 0 (Single)
//       65535 (UInt16) --> 65535 (Single)
//       0 (UInt32) --> 0 (Single)
//       4294967295 (UInt32) --> 4.2949673E+09 (Single)
//       0 (UInt64) --> 0 (Single)
//       18446744073709551615 (UInt64) --> 1.84467441E+19 (Single)
open System

let values: obj list = 
    [ Byte.MinValue; Byte.MaxValue; Decimal.MinValue
      Decimal.MaxValue; Double.MinValue; Double.MaxValue
      Int16.MinValue; Int16.MaxValue; Int32.MinValue
      Int32.MaxValue; Int64.MinValue; Int64.MaxValue
      SByte.MinValue; SByte.MaxValue; UInt16.MinValue
      UInt16.MaxValue; UInt32.MinValue; UInt32.MaxValue
      UInt64.MinValue; UInt64.MaxValue ]

for value in values do
    let sngValue = 
        match value with
        | :? byte as v -> float32 v
        | :? decimal as v -> float32 v
        | :? double as v -> float32 v
        | :? int16 as v -> float32 v
        | :? int as v -> float32 v
        | :? int64 as v -> float32 v
        | :? int8 as v -> float32 v
        | :? uint16 as v -> float32 v
        | :? uint as v -> float32 v
        | :? uint64 as v -> float32 v
        | _ -> raise (NotImplementedException "Unknown Type")
    printfn $"{value} ({value.GetType().Name}) --> {sngValue:R} ({sngValue.GetType().Name})"
// The example displays the following output:
//       0 (Byte) --> 0 (Single)
//       255 (Byte) --> 255 (Single)
//       -79228162514264337593543950335 (Decimal) --> -7.92281625E+28 (Single)
//       79228162514264337593543950335 (Decimal) --> 7.92281625E+28 (Single)
//       -1.79769313486232E+308 (Double) --> -Infinity (Single)
//       1.79769313486232E+308 (Double) --> Infinity (Single)
//       -32768 (Int16) --> -32768 (Single)
//       32767 (Int16) --> 32767 (Single)
//       -2147483648 (Int32) --> -2.14748365E+09 (Single)
//       2147483647 (Int32) --> 2.14748365E+09 (Single)
//       -9223372036854775808 (Int64) --> -9.223372E+18 (Single)
//       9223372036854775807 (Int64) --> 9.223372E+18 (Single)
//       -128 (SByte) --> -128 (Single)
//       127 (SByte) --> 127 (Single)
//       0 (UInt16) --> 0 (Single)
//       65535 (UInt16) --> 65535 (Single)
//       0 (UInt32) --> 0 (Single)
//       4294967295 (UInt32) --> 4.2949673E+09 (Single)
//       0 (UInt64) --> 0 (Single)
//       18446744073709551615 (UInt64) --> 1.84467441E+19 (Single)
Module Example5
    Public Sub Main()
        Dim values() As Object = {Byte.MinValue, Byte.MaxValue, Decimal.MinValue,
                                 Decimal.MaxValue, Double.MinValue, Double.MaxValue,
                                 Int16.MinValue, Int16.MaxValue, Int32.MinValue,
                                 Int32.MaxValue, Int64.MinValue, Int64.MaxValue,
                                 SByte.MinValue, SByte.MaxValue, UInt16.MinValue,
                                 UInt16.MaxValue, UInt32.MinValue, UInt32.MaxValue,
                                 UInt64.MinValue, UInt64.MaxValue}
        Dim sngValue As Single
        For Each value In values
            If value.GetType() = GetType(Double) Then
                sngValue = CSng(value)
            Else
                sngValue = value
            End If
            Console.WriteLine("{0} ({1}) --> {2:R} ({3})",
                           value, value.GetType().Name,
                           sngValue, sngValue.GetType().Name)
        Next
    End Sub
End Module
' The example displays the following output:
'       0 (Byte) --> 0 (Single)
'       255 (Byte) --> 255 (Single)
'       -79228162514264337593543950335 (Decimal) --> -7.92281625E+28 (Single)
'       79228162514264337593543950335 (Decimal) --> 7.92281625E+28 (Single)
'       -1.79769313486232E+308 (Double) --> -Infinity (Single)
'       1.79769313486232E+308 (Double) --> Infinity (Single)
'       -32768 (Int16) --> -32768 (Single)
'       32767 (Int16) --> 32767 (Single)
'       -2147483648 (Int32) --> -2.14748365E+09 (Single)
'       2147483647 (Int32) --> 2.14748365E+09 (Single)
'       -9223372036854775808 (Int64) --> -9.223372E+18 (Single)
'       9223372036854775807 (Int64) --> 9.223372E+18 (Single)
'       -128 (SByte) --> -128 (Single)
'       127 (SByte) --> 127 (Single)
'       0 (UInt16) --> 0 (Single)
'       65535 (UInt16) --> 65535 (Single)
'       0 (UInt32) --> 0 (Single)
'       4294967295 (UInt32) --> 4.2949673E+09 (Single)
'       0 (UInt64) --> 0 (Single)
'       18446744073709551615 (UInt64) --> 1.84467441E+19 (Single)

Bovendien worden de Double waarden Double.NaN, Double.PositiveInfinityen Double.NegativeInfinity geconverteerd naar Single.NaNrespectievelijk , Single.PositiveInfinityen Single.NegativeInfinity, .

De conversie van de waarde van sommige numerieke typen naar een Single waarde kan leiden tot verlies van precisie. Zoals in het voorbeeld wordt geïllustreerd, is een verlies van precisie mogelijk bij het converteren Decimalvan , Double, Int32, , Int64, en UInt32UInt64 waarden naar Single waarden.

De conversie van een Single waarde naar een Double is een widening conversie. De conversie kan leiden tot een verlies van precisie als het Double type geen nauwkeurige weergave voor de Single waarde heeft.

De conversie van een Single waarde naar een waarde van een ander primitief numeriek gegevenstype dan een Double is een smalle conversie en vereist een cast-operator (in C#) of een conversiemethode (in Visual Basic). Waarden die buiten het bereik van het doelgegevenstype vallen, zoals gedefinieerd door de MinValue en MaxValue eigenschappen van het doeltype, gedragen zich zoals weergegeven in de volgende tabel.

Doeltype Result
Elk geheel getype Een OverflowException uitzondering als de conversie plaatsvindt in een gecontroleerde context.

Als de conversie plaatsvindt in een niet-gecontroleerde context (de standaardinstelling in C#), slaagt de conversiebewerking, maar de waarde overloopt.
Decimal Een OverflowException uitzondering.

Daarnaast genereren Single.NaN, Single.PositiveInfinity en Single.NegativeInfinity een OverflowException voor conversies naar gehele getallen in een gecontroleerde context, maar deze waarden lopen over wanneer ze worden geconverteerd naar gehele getallen in een niet-gecontroleerde context. Voor conversies naar Decimal wordt er altijd een OverflowException gegooid. Voor conversies naar Double converteren ze respectievelijk naar Double.NaN, Double.PositiveInfinity en Double.NegativeInfinity.

Houd er rekening mee dat een verlies van precisie kan resulteren in het converteren van een Single waarde naar een ander numeriek type. In het geval van het converteren van niet-integrale Single waarden, zoals de uitvoer uit het voorbeeld laat zien, gaat het breukonderdeel verloren wanneer de Single waarde wordt afgerond (zoals in Visual Basic) of afgekapt (zoals in C# en F#). Voor conversies naar Decimal waarden heeft de Single waarde mogelijk geen nauwkeurige weergave in het doelgegevenstype.

In het volgende voorbeeld wordt een aantal Single waarden geconverteerd naar verschillende andere numerieke typen. De conversies vinden plaats in een gecontroleerde context in Visual Basic (de standaardinstelling), in C# (vanwege het ingeschakelde trefwoord) en in F# (vanwege de open Checked instructie). In de uitvoer van het voorbeeld ziet u het resultaat voor conversies in zowel een gecontroleerde als een niet-gecontroleerde context. U kunt conversies uitvoeren in een niet-gecontroleerde context in Visual Basic door te compileren met de /removeintchecks+ compilerswitch, in C# door de checked instructie te becommentariëren en in F# door de open Checked instructie te becommentariëren.

float[] values = { Single.MinValue, -67890.1234f, -12345.6789f,
                 12345.6789f, 67890.1234f, Single.MaxValue,
                 Single.NaN, Single.PositiveInfinity,
                 Single.NegativeInfinity };
checked
{
    foreach (var value in values)
    {
        try
        {
            Int64 lValue = (long)value;
            Console.WriteLine($"{value} ({value.GetType().Name}) --> {lValue} (0x{lValue:X16}) ({lValue.GetType().Name})");
        }
        catch (OverflowException)
        {
            Console.WriteLine($"Unable to convert {value} to Int64.");
        }
        try
        {
            UInt64 ulValue = (ulong)value;
            Console.WriteLine($"{value} ({value.GetType().Name}) --> {ulValue} (0x{ulValue:X16}) ({ulValue.GetType().Name})");
        }
        catch (OverflowException)
        {
            Console.WriteLine($"Unable to convert {value} to UInt64.");
        }
        try
        {
            Decimal dValue = (decimal)value;
            Console.WriteLine($"{value} ({value.GetType().Name}) --> {dValue} ({dValue.GetType().Name})");
        }
        catch (OverflowException)
        {
            Console.WriteLine($"Unable to convert {value} to Decimal.");
        }

        Double dblValue = value;
        Console.WriteLine($"{value} ({value.GetType().Name}) --> {dblValue} ({dblValue.GetType().Name})");
        Console.WriteLine();
    }
}

// The example displays the following output for conversions performed
// in a checked context:
//       Unable to convert -3.402823E+38 to Int64.
//       Unable to convert -3.402823E+38 to UInt64.
//       Unable to convert -3.402823E+38 to Decimal.
//       -3.402823E+38 (Single) --> -3.40282346638529E+38 (Double)
//
//       -67890.13 (Single) --> -67890 (0xFFFFFFFFFFFEF6CE) (Int64)
//       Unable to convert -67890.13 to UInt64.
//       -67890.13 (Single) --> -67890.12 (Decimal)
//       -67890.13 (Single) --> -67890.125 (Double)
//
//       -12345.68 (Single) --> -12345 (0xFFFFFFFFFFFFCFC7) (Int64)
//       Unable to convert -12345.68 to UInt64.
//       -12345.68 (Single) --> -12345.68 (Decimal)
//       -12345.68 (Single) --> -12345.6787109375 (Double)
//
//       12345.68 (Single) --> 12345 (0x0000000000003039) (Int64)
//       12345.68 (Single) --> 12345 (0x0000000000003039) (UInt64)
//       12345.68 (Single) --> 12345.68 (Decimal)
//       12345.68 (Single) --> 12345.6787109375 (Double)
//
//       67890.13 (Single) --> 67890 (0x0000000000010932) (Int64)
//       67890.13 (Single) --> 67890 (0x0000000000010932) (UInt64)
//       67890.13 (Single) --> 67890.12 (Decimal)
//       67890.13 (Single) --> 67890.125 (Double)
//
//       Unable to convert 3.402823E+38 to Int64.
//       Unable to convert 3.402823E+38 to UInt64.
//       Unable to convert 3.402823E+38 to Decimal.
//       3.402823E+38 (Single) --> 3.40282346638529E+38 (Double)
//
//       Unable to convert NaN to Int64.
//       Unable to convert NaN to UInt64.
//       Unable to convert NaN to Decimal.
//       NaN (Single) --> NaN (Double)
//
//       Unable to convert ∞ to Int64.
//       Unable to convert ∞ to UInt64.
//       Unable to convert ∞ to Decimal.
//       ∞ (Single) --> ∞ (Double)
//
//       Unable to convert -∞ to Int64.
//       Unable to convert -∞ to UInt64.
//       Unable to convert -∞ to Decimal.
//       -∞ (Single) --> -∞ (Double)
open System
open Checked

let values = 
    [ Single.MinValue; -67890.1234f; -12345.6789f
      12345.6789f; 67890.1234f; Single.MaxValue
      Single.NaN; Single.PositiveInfinity
      Single.NegativeInfinity ]

for value in values do
    try
        let lValue = int64 value
        printfn $"{value} ({value.GetType().Name}) --> {lValue} (0x{lValue:X16}) ({lValue.GetType().Name})"
    with :? OverflowException ->
        printfn $"Unable to convert {value} to Int64."
    try
        let ulValue = uint64 value
        printfn $"{value} ({value.GetType().Name}) --> {ulValue} (0x{ulValue:X16}) ({ulValue.GetType().Name})"
    with :? OverflowException ->
        printfn $"Unable to convert {value} to UInt64."
    try
        let dValue = decimal value
        printfn $"{value} ({value.GetType().Name}) --> {dValue} ({dValue.GetType().Name})"
    with :? OverflowException ->
        printfn $"Unable to convert {value} to Decimal."

    let dblValue = double value
    printfn $"{value} ({value.GetType().Name}) --> {dblValue} ({dblValue.GetType().Name})\n"
// The example displays the following output for conversions performed
// in a checked context:
//       Unable to convert -3.402823E+38 to Int64.
//       Unable to convert -3.402823E+38 to UInt64.
//       Unable to convert -3.402823E+38 to Decimal.
//       -3.402823E+38 (Single) --> -3.40282346638529E+38 (Double)
//
//       -67890.13 (Single) --> -67890 (0xFFFFFFFFFFFEF6CE) (Int64)
//       Unable to convert -67890.13 to UInt64.
//       -67890.13 (Single) --> -67890.12 (Decimal)
//       -67890.13 (Single) --> -67890.125 (Double)
//
//       -12345.68 (Single) --> -12345 (0xFFFFFFFFFFFFCFC7) (Int64)
//       Unable to convert -12345.68 to UInt64.
//       -12345.68 (Single) --> -12345.68 (Decimal)
//       -12345.68 (Single) --> -12345.6787109375 (Double)
//
//       12345.68 (Single) --> 12345 (0x0000000000003039) (Int64)
//       12345.68 (Single) --> 12345 (0x0000000000003039) (UInt64)
//       12345.68 (Single) --> 12345.68 (Decimal)
//       12345.68 (Single) --> 12345.6787109375 (Double)
//
//       67890.13 (Single) --> 67890 (0x0000000000010932) (Int64)
//       67890.13 (Single) --> 67890 (0x0000000000010932) (UInt64)
//       67890.13 (Single) --> 67890.12 (Decimal)
//       67890.13 (Single) --> 67890.125 (Double)
//
//       Unable to convert 3.402823E+38 to Int64.
//       Unable to convert 3.402823E+38 to UInt64.
//       Unable to convert 3.402823E+38 to Decimal.
//       3.402823E+38 (Single) --> 3.40282346638529E+38 (Double)
//
//       Unable to convert NaN to Int64.
//       Unable to convert NaN to UInt64.
//       Unable to convert NaN to Decimal.
//       NaN (Single) --> NaN (Double)
//
//       Unable to convert Infinity to Int64.
//       Unable to convert Infinity to UInt64.
//       Unable to convert Infinity to Decimal.
//       Infinity (Single) --> Infinity (Double)
//
//       Unable to convert -Infinity to Int64.
//       Unable to convert -Infinity to UInt64.
//       Unable to convert -Infinity to Decimal.
//       -Infinity (Single) --> -Infinity (Double)
// The example displays the following output for conversions performed
// in an unchecked context:
//       -3.402823E+38 (Single) --> -9223372036854775808 (0x8000000000000000) (Int64)
//       -3.402823E+38 (Single) --> 9223372036854775808 (0x8000000000000000) (UInt64)
//       Unable to convert -3.402823E+38 to Decimal.
//       -3.402823E+38 (Single) --> -3.40282346638529E+38 (Double)
//
//       -67890.13 (Single) --> -67890 (0xFFFFFFFFFFFEF6CE) (Int64)
//       -67890.13 (Single) --> 18446744073709483726 (0xFFFFFFFFFFFEF6CE) (UInt64)
//       -67890.13 (Single) --> -67890.12 (Decimal)
//       -67890.13 (Single) --> -67890.125 (Double)
//
//       -12345.68 (Single) --> -12345 (0xFFFFFFFFFFFFCFC7) (Int64)
//       -12345.68 (Single) --> 18446744073709539271 (0xFFFFFFFFFFFFCFC7) (UInt64)
//       -12345.68 (Single) --> -12345.68 (Decimal)
//       -12345.68 (Single) --> -12345.6787109375 (Double)
//
//       12345.68 (Single) --> 12345 (0x0000000000003039) (Int64)
//       12345.68 (Single) --> 12345 (0x0000000000003039) (UInt64)
//       12345.68 (Single) --> 12345.68 (Decimal)
//       12345.68 (Single) --> 12345.6787109375 (Double)
//
//       67890.13 (Single) --> 67890 (0x0000000000010932) (Int64)
//       67890.13 (Single) --> 67890 (0x0000000000010932) (UInt64)
//       67890.13 (Single) --> 67890.12 (Decimal)
//       67890.13 (Single) --> 67890.125 (Double)
//
//       3.402823E+38 (Single) --> -9223372036854775808 (0x8000000000000000) (Int64)
//       3.402823E+38 (Single) --> 0 (0x0000000000000000) (UInt64)
//       Unable to convert 3.402823E+38 to Decimal.
//       3.402823E+38 (Single) --> 3.40282346638529E+38 (Double)
//
//       NaN (Single) --> -9223372036854775808 (0x8000000000000000) (Int64)
//       NaN (Single) --> 0 (0x0000000000000000) (UInt64)
//       Unable to convert NaN to Decimal.
//       NaN (Single) --> NaN (Double)
//
//       Infinity (Single) --> -9223372036854775808 (0x8000000000000000) (Int64)
//       Infinity (Single) --> 0 (0x0000000000000000) (UInt64)
//       Unable to convert Infinity to Decimal.
//       Infinity (Single) --> Infinity (Double)
//
//       -Infinity (Single) --> -9223372036854775808 (0x8000000000000000) (Int64)
//       -Infinity (Single) --> 9223372036854775808 (0x8000000000000000) (UInt64)
//       Unable to convert -Infinity to Decimal.
//       -Infinity (Single) --> -Infinity (Double)
Module Example6
    Public Sub Main()
        Dim values() As Single = {Single.MinValue, -67890.1234, -12345.6789,
                                 12345.6789, 67890.1234, Single.MaxValue,
                                 Single.NaN, Single.PositiveInfinity,
                                 Single.NegativeInfinity}
        For Each value In values
            Try
                Dim lValue As Long = CLng(value)
                Console.WriteLine("{0} ({1}) --> {2} (0x{2:X16}) ({3})",
                               value, value.GetType().Name,
                               lValue, lValue.GetType().Name)
            Catch e As OverflowException
                Console.WriteLine("Unable to convert {0} to Int64.", value)
            End Try
            Try
                Dim ulValue As UInt64 = CULng(value)
                Console.WriteLine("{0} ({1}) --> {2} (0x{2:X16}) ({3})",
                               value, value.GetType().Name,
                               ulValue, ulValue.GetType().Name)
            Catch e As OverflowException
                Console.WriteLine("Unable to convert {0} to UInt64.", value)
            End Try
            Try
                Dim dValue As Decimal = CDec(value)
                Console.WriteLine("{0} ({1}) --> {2} ({3})",
                               value, value.GetType().Name,
                               dValue, dValue.GetType().Name)
            Catch e As OverflowException
                Console.WriteLine("Unable to convert {0} to Decimal.", value)
            End Try

            Dim dblValue As Double = value
            Console.WriteLine("{0} ({1}) --> {2} ({3})",
                           value, value.GetType().Name,
                           dblValue, dblValue.GetType().Name)
            Console.WriteLine()
        Next
    End Sub
End Module

' The example displays the following output for conversions performed
' in a checked context:
'       Unable to convert -3.402823E+38 to Int64.
'       Unable to convert -3.402823E+38 to UInt64.
'       Unable to convert -3.402823E+38 to Decimal.
'       -3.402823E+38 (Single) --> -3.40282346638529E+38 (Double)
'
'       -67890.13 (Single) --> -67890 (0xFFFFFFFFFFFEF6CE) (Int64)
'       Unable to convert -67890.13 to UInt64.
'       -67890.13 (Single) --> -67890.12 (Decimal)
'       -67890.13 (Single) --> -67890.125 (Double)
'
'       -12345.68 (Single) --> -12346 (0xFFFFFFFFFFFFCFC6) (Int64)
'       Unable to convert -12345.68 to UInt64.
'       -12345.68 (Single) --> -12345.68 (Decimal)
'       -12345.68 (Single) --> -12345.6787109375 (Double)
'
'       12345.68 (Single) --> 12346 (0x000000000000303A) (Int64)
'       12345.68 (Single) --> 12346 (0x000000000000303A) (UInt64)
'       12345.68 (Single) --> 12345.68 (Decimal)
'       12345.68 (Single) --> 12345.6787109375 (Double)
'
'       67890.13 (Single) --> 67890 (0x0000000000010932) (Int64)
'       67890.13 (Single) --> 67890 (0x0000000000010932) (UInt64)
'       67890.13 (Single) --> 67890.12 (Decimal)
'       67890.13 (Single) --> 67890.125 (Double)
'
'       Unable to convert 3.402823E+38 to Int64.
'       Unable to convert 3.402823E+38 to UInt64.
'       Unable to convert 3.402823E+38 to Decimal.
'       3.402823E+38 (Single) --> 3.40282346638529E+38 (Double)
'
'       Unable to convert NaN to Int64.
'       Unable to convert NaN to UInt64.
'       Unable to convert NaN to Decimal.
'       NaN (Single) --> NaN (Double)
'
'       Unable to convert ∞ to Int64.
'       Unable to convert ∞ to UInt64.
'       Unable to convert ∞ to Decimal.
'       ∞ (Single) --> ∞ (Double)
'
'       Unable to convert -∞ to Int64.
'       Unable to convert -∞ to UInt64.
'       Unable to convert -∞ to Decimal.
'       -∞ (Single) --> -∞ (Double)

Zie voor meer informatie over de conversie van numerieke typen Typeconversie in .NET en Typeconversietabellen.

Drijvende-komma-functionaliteit

De Single structuur en gerelateerde typen bieden methoden om de volgende categorieën bewerkingen uit te voeren:

  • Vergelijking van waarden. U kunt de Equals methode aanroepen om te bepalen of twee Single waarden gelijk zijn of de CompareTo methode om de relatie tussen twee waarden te bepalen.

    De Single structuur ondersteunt ook een volledige set vergelijkingsoperatoren. U kunt bijvoorbeeld testen op gelijkheid of ongelijkheid of bepalen of de ene waarde groter is dan of gelijk is aan een andere waarde. Als een van de operanden een Doubleis, wordt de Single waarde geconverteerd naar een Double voordat de vergelijking wordt uitgevoerd. Als een van de operanden een integraal type is, wordt deze geconverteerd naar een Single voordat de vergelijking wordt uitgevoerd. Hoewel deze conversies breder worden, kan dit leiden tot verlies van precisie.

    Warning

    Vanwege verschillen in precisie kunnen twee Single waarden die u verwacht gelijk te zijn ongelijk zijn, wat van invloed is op het resultaat van de vergelijking. Zie de sectie Test voor gelijkheid voor meer informatie over het vergelijken van twee Single waarden.

    U kunt ook de IsNaNmethoden , IsInfinityen IsPositiveInfinityIsNegativeInfinity methoden aanroepen om te testen op deze speciale waarden.

  • Wiskundige bewerkingen. Algemene rekenkundige bewerkingen, zoals optellen, aftrekken, vermenigvuldigen en delen, worden geïmplementeerd door taalcompilaties en CIL-instructies (Common Intermediate Language) in plaats van op Single methoden. Als de andere operand in een wiskundige bewerking een Doubleis, wordt deze Single geconverteerd naar een Double voordat de bewerking wordt uitgevoerd en is het resultaat van de bewerking ook een Double waarde. Als de andere operand een integraal type is, wordt deze geconverteerd naar een Single voordat de bewerking wordt uitgevoerd en is het resultaat van de bewerking ook een Single waarde.

    U kunt andere wiskundige bewerkingen uitvoeren door methoden van static (Shared in Visual Basic) in de System.Math klasse aan te roepen. Deze omvatten aanvullende methoden die vaak worden gebruikt voor rekenkundige bewerkingen (zoals Math.Abs, Math.Signen Math.Sqrt), geometrie (zoals Math.Cos en Math.Sin) en calculus (zoals Math.Log). In alle gevallen wordt de Single waarde geconverteerd naar een Double.

    U kunt ook de afzonderlijke bits in een Single waarde bewerken. De BitConverter.GetBytes(Single) methode retourneert het bitpatroon in een bytematrix. Door die bytematrix door te geven aan de BitConverter.ToInt32 methode, kunt u ook het bitpatroon van de Single waarde behouden in een 32-bits geheel getal.

  • Afronden. Afronding wordt vaak gebruikt als techniek om de impact van verschillen tussen waarden te verminderen, veroorzaakt door problemen met de zwevendekommavoorstelling en precisie. U kunt een Single waarde afronden door de Math.Round methode aan te roepen. Houd er echter rekening mee dat de Single waarde wordt geconverteerd naar een Double voordat de methode wordt aangeroepen en dat de conversie kan leiden tot verlies van precisie.

  • Opmaak. U kunt een Single waarde converteren naar de tekenreeksweergave door de ToString methode aan te roepen of door de samengestelde opmaakfunctie te gebruiken. Zie Standaardtekenreeksen met numerieke notatie entekenreeksen voor aangepaste numerieke notatietekenreeksen voor meer informatie over hoe tekenreeksen voor opmaak de tekenreeksen van zwevende kommawaarden bepalen.

  • Tekenreeksen parseren. U kunt de tekenreeksweergave van een drijvende-kommawaarde converteren naar een Single waarde door de Parse of TryParse methode aan te roepen. Als de parseringsbewerking mislukt, genereert de Parse methode een uitzondering, terwijl de TryParse methode retourneert false.

  • Typeconversie. De Single structuur biedt een expliciete interface-implementatie voor de IConvertible interface, die ondersteuning biedt voor conversie tussen twee standaard .NET-gegevenstypen. Taalcompilers ondersteunen ook de impliciete conversie van waarden voor alle andere standaard numerieke typen, met uitzondering van de conversie van Double naar Single waarden. De conversie van een waarde van een standaard numeriek type, anders dan een Double, naar een Single is een uitbreidende conversie en vereist geen gebruik van een cast-operator of conversiemethode.

    Conversie van 32-bits en 64-bits gehele getallen kan echter leiden tot verlies van precisie. De volgende tabel bevat de verschillen in precisie voor 32-bits, 64-bits en Double typen:

    Typ Maximale precisie (decimale cijfers) Interne precisie (decimale cijfers)
    Double 15 17
    Int32 en UInt32 10 10
    Int64 en UInt64 19 19
    Single 7 9

    Het probleem van precisie is het meest van invloed op Single waarden die worden geconverteerd naar Double waarden. In het volgende voorbeeld zijn twee waarden die worden geproduceerd door identieke delingsbewerkingen ongelijk, omdat een van de waarden een drijvende kommawaarde met één precisie is die wordt geconverteerd naar een Double.

    Double value1 = 1 / 3.0;
    Single sValue2 = 1 / 3.0f;
    Double value2 = (Double)sValue2;
    Console.WriteLine($"{value1:R} = {value2:R}: {value1.Equals(value2)}");
    
    // The example displays the following output on .NET:
    //        0.3333333333333333 = 0.3333333432674408: False
    
    let value1 = 1. / 3.
    let sValue2 = 1f / 3f
    let value2 = double sValue2
    printfn $"{value1:R} = {value2:R}: {value1.Equals value2}"
    // The example displays the following output:
    //        0.33333333333333331 = 0.3333333432674408: False
    
    Dim value1 As Double = 1 / 3
    Dim sValue2 As Single = 1 / 3
    Dim value2 As Double = CDbl(sValue2)
    Console.WriteLine("{0} = {1}: {2}", value1, value2, value1.Equals(value2))
    
    ' The example displays the following output:
    '       0.3333333333333333 = 0.3333333432674408: False
    

Velden

Name Description
E

Vertegenwoordigt de natuurlijke logaritmische basis, opgegeven door de constante e.

Epsilon

Vertegenwoordigt de kleinste positieve Single waarde die groter is dan nul. Dit veld is constant.

MaxValue

Vertegenwoordigt de grootst mogelijke waarde van Single. Dit veld is constant.

MinValue

Vertegenwoordigt de kleinste mogelijke waarde van Single. Dit veld is constant.

NaN

Vertegenwoordigt geen getal (NaN). Dit veld is constant.

NegativeInfinity

Geeft een negatief oneindigheid aan. Dit veld is constant.

NegativeZero

Vertegenwoordigt het getal negatief nul (-0).

Pi

Vertegenwoordigt de verhouding van de omtrek van een cirkel tot de diameter, opgegeven door de constante, π.

PositiveInfinity

Geeft positieve oneindigheid aan. Dit veld is constant.

Tau

Vertegenwoordigt het aantal radialen op één beurt, opgegeven door de constante, τ.

Methoden

Name Description
Abs(Single)

Berekent de absolute waarde van een waarde.

Acos(Single)

Berekent de boogcosinus van een waarde.

Acosh(Single)

Berekent de hyperbolische boogcosinus van een waarde.

AcosPi(Single)

Berekent de boogcosinus van een waarde en deelt het resultaat door pi.

Asin(Single)

Berekent de boogsinus van een waarde.

Asinh(Single)

Berekent de sinus hyperbolische boog van een waarde.

AsinPi(Single)

Berekent de boogsinus van een waarde en deelt het resultaat door pi.

Atan(Single)

Berekent de boogtangens van een waarde.

Atan2(Single, Single)

Berekent de boogtangens van het quotiënt van twee waarden.

Atan2Pi(Single, Single)

Berekent de boogtangens voor het quotiënt van twee waarden en deelt het resultaat door pi.

Atanh(Single)

Berekent de hyperbolische boogtangens van een waarde.

AtanPi(Single)

Berekent de boogtangens van een waarde en deelt het resultaat door pi.

BitDecrement(Single)

Retourneert de grootste waarde die kleiner is dan een opgegeven waarde.

BitIncrement(Single)

Retourneert de kleinste waarde die groter is dan een opgegeven waarde.

Cbrt(Single)

Berekent de kubushoofdmap van een waarde.

Ceiling(Single)

Berekent het maximum van een waarde.

Clamp(Single, Single, Single)

Klemmen een waarde tot een inclusieve minimum- en maximumwaarde.

ClampNative(Single, Single, Single)

Klemmen een waarde tot een inclusieve minimum- en maximumwaarde met behulp van platformspecifiek gedrag voor NaN en NegativeZero.

CompareTo(Object)

Vergelijkt dit exemplaar met een opgegeven object en retourneert een geheel getal dat aangeeft of de waarde van dit exemplaar kleiner is dan, gelijk is aan of groter is dan de waarde van het opgegeven object.

CompareTo(Single)

Vergelijkt dit exemplaar met een opgegeven drijvendekommagetal met één precisie en retourneert een geheel getal dat aangeeft of de waarde van dit exemplaar kleiner is dan, gelijk is aan of groter is dan de waarde van het opgegeven drijvendekommagetal met één precisie.

ConvertToInteger<TInteger>(Single)

Converteert een waarde naar een opgegeven geheel getal met behulp van verzadiging bij overloop

ConvertToIntegerNative<TInteger>(Single)

Converteert een waarde naar een opgegeven geheel getaltype met behulp van platformspecifiek gedrag bij overloop.

CopySign(Single, Single)

Kopieert het teken van een waarde naar het teken van een andere waarde.

Cos(Single)

Berekent de cosinus van een waarde.

Cosh(Single)

Berekent de cosinus hyperbolicus van een waarde.

CosPi(Single)

Berekent de cosinus van een waarde die is vermenigvuldigd door pi.

CreateChecked<TOther>(TOther)

Hiermee maakt u een exemplaar van het huidige type op basis van een waarde en genereert u een overloopuitzondering voor waarden die buiten het vertegenwoordigbare bereik van het huidige type vallen.

CreateSaturating<TOther>(TOther)

Hiermee maakt u een exemplaar van het huidige type op basis van een waarde, waarbij alle waarden die buiten het vertegenwoordigbare bereik van het huidige type vallen, worden verzadiging weergegeven.

CreateTruncating<TOther>(TOther)

Hiermee maakt u een exemplaar van het huidige type op basis van een waarde, waarbij alle waarden worden afgekapt die buiten het vertegenwoordigbare bereik van het huidige type vallen.

DegreesToRadians(Single)

Converteert een bepaalde waarde van graden naar radialen.

Equals(Object)

Retourneert een waarde die aangeeft of dit exemplaar gelijk is aan een opgegeven object.

Equals(Single)

Retourneert een waarde die aangeeft of dit exemplaar en een opgegeven Single object dezelfde waarde vertegenwoordigen.

Exp(Single)

Berekeningen E die tot een bepaalde macht zijn verheven.

Exp10(Single)

Berekeningen 10 die tot een bepaalde macht zijn verheven.

Exp10M1(Single)

Berekeningen 10 die tot een bepaalde macht zijn verheven en één aftrekken.

Exp2(Single)

Berekeningen 2 die tot een bepaalde macht zijn verheven.

Exp2M1(Single)

Berekeningen 2 die tot een bepaalde macht zijn verheven en één aftrekken.

ExpM1(Single)

Berekeningen E die tot een bepaalde macht zijn verheven en één aftrekken.

Floor(Single)

Berekent de vloer van een waarde.

FusedMultiplyAdd(Single, Single, Single)

Berekent de samenvoeging van drie waarden.

GetHashCode()

Retourneert de hash-code voor dit exemplaar.

GetTypeCode()

Geeft als resultaat het TypeCode voor waardetype Single.

Hypot(Single, Single)

Berekent de hypotenuse op basis van twee waarden die de lengten van de kortere zijden in een driehoek met een rechte hoek vertegenwoordigen.

Ieee754Remainder(Single, Single)

Berekent de rest van twee waarden, zoals opgegeven door IEEE 754.

ILogB(Single)

Berekent de logaritme van een geheel getal van een waarde.

IsEvenInteger(Single)

Bepaalt of een waarde een even integraal getal vertegenwoordigt.

IsFinite(Single)

Bepaalt of de opgegeven waarde eindig is (nul, subnormaal of normaal).

IsInfinity(Single)

Retourneert een waarde die aangeeft of het opgegeven getal negatief of positief oneindig is.

IsInteger(Single)

Bepaalt of een waarde een integrale waarde vertegenwoordigt.

IsNaN(Single)

Retourneert een waarde die aangeeft of de opgegeven waarde geen getal (NaN) is.

IsNegative(Single)

Bepaalt of de opgegeven waarde negatief is.

IsNegativeInfinity(Single)

Retourneert een waarde die aangeeft of het opgegeven getal een negatieve oneindigheid oplevert.

IsNormal(Single)

Bepaalt of de opgegeven waarde normaal is.

IsOddInteger(Single)

Bepaalt of een waarde een oneven integraal getal vertegenwoordigt.

IsPositive(Single)

Bepaalt of een waarde positief is.

IsPositiveInfinity(Single)

Retourneert een waarde die aangeeft of het opgegeven getal positief oneindig is.

IsPow2(Single)

Bepaalt of een waarde een macht van twee is.

IsRealNumber(Single)

Bepaalt of een waarde een reëel getal vertegenwoordigt.

IsSubnormal(Single)

Bepaalt of de opgegeven waarde subnormaal is.

Lerp(Single, Single, Single)

Hiermee wordt een lineaire interpolatie tussen twee waarden uitgevoerd op basis van het opgegeven gewicht.

Log(Single, Single)

Berekent de logaritme van een waarde in de opgegeven basis.

Log(Single)

Berekent de natuurlijke (base-E logaritme van een waarde).

Log10(Single)

Berekent de logaritme met grondtal 10 van een waarde.

Log10P1(Single)

Berekent de logaritme met grondtal 10 van een waarde plus één.

Log2(Single)

Berekent het logboek2 van een waarde.

Log2P1(Single)

Berekent de logaritme met grondtal 2 van een waarde plus één.

LogP1(Single)

Berekent de natuurlijke logaritmebase-E van een waarde plus één.

Max(Single, Single)

Vergelijkt twee waarden met berekeningen die groter zijn.

MaxMagnitude(Single, Single)

Vergelijkt twee waarden met berekeningen die groter zijn.

MaxMagnitudeNumber(Single, Single)

Vergelijkt twee waarden met berekeningen die de grotere grootte hebben en de andere waarde retourneren als een invoer is NaN.

MaxNative(Single, Single)

Vergelijkt twee waarden met berekeningen die groter zijn met behulp van platformspecifiek gedrag voor NaN en NegativeZero.

MaxNumber(Single, Single)

Vergelijkt twee waarden met berekeningen die groter zijn en de andere waarde retourneren als een invoer is NaN.

Min(Single, Single)

Vergelijkt twee waarden met berekeningen die kleiner zijn.

MinMagnitude(Single, Single)

Vergelijkt twee waarden met berekeningen die kleiner zijn.

MinMagnitudeNumber(Single, Single)

Vergelijkt twee waarden met berekeningen die de lagere grootte hebben en de andere waarde retourneren als een invoer is NaN.

MinNative(Single, Single)

Vergelijkt twee waarden met berekeningen die minder gebruikmaken van platformspecifiek gedrag voor NaN en NegativeZero.

MinNumber(Single, Single)

Vergelijkt twee waarden met berekeningen die kleiner zijn en de andere waarde retourneren als een invoer is NaN.

MultiplyAddEstimate(Single, Single, Single)

Berekent een schatting van (left * right) + addend.

Parse(ReadOnlySpan<Byte>, IFormatProvider)

Parseert een reeks UTF-8 tekens in een waarde.

Parse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider)

Parseert een reeks UTF-8 tekens in een waarde.

Parse(ReadOnlySpan<Char>, IFormatProvider)

Parseert een reeks tekens in een waarde.

Parse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider)

Converteert een tekenspanne die de tekenreeksweergave van een getal in een opgegeven stijl en cultuurspecifieke notatie bevat naar het equivalent van een drijvendekommagetal met één precisie.

Parse(String, IFormatProvider)

Converteert de tekenreeksweergave van een getal in een opgegeven cultuurspecifieke notatie naar het equivalent van een drijvendekommagetal met één precisie.

Parse(String, NumberStyles, IFormatProvider)

Converteert de tekenreeksweergave van een getal in een opgegeven stijl en cultuurspecifieke notatie naar het equivalent van drijvendekommagetal met één precisie.

Parse(String, NumberStyles)

Converteert de tekenreeksweergave van een getal in een opgegeven stijl naar het equivalent van een drijvendekommagetal met één precisie.

Parse(String)

Converteert de tekenreeksweergave van een getal naar het equivalent van een drijvendekommagetal met één precisie.

Pow(Single, Single)

Berekent een waarde die is verhoogd tot een bepaalde macht.

RadiansToDegrees(Single)

Converteert een bepaalde waarde van radialen naar graden.

ReciprocalEstimate(Single)

Berekent een schatting van de wederkerigheid van een waarde.

ReciprocalSqrtEstimate(Single)

Berekent een schatting van de wederzijdse vierkantswortel van een waarde.

RootN(Single, Int32)

Berekent de n-th-hoofdmap van een waarde.

Round(Single, Int32, MidpointRounding)

Rondt een waarde af op een opgegeven aantal fractionele cijfers met behulp van de standaard afgeronde modus (ToEven).

Round(Single, Int32)

Rondt een waarde af op een opgegeven aantal fractionele cijfers met behulp van de standaard afgeronde modus (ToEven).

Round(Single, MidpointRounding)

Rondt een waarde af op het dichtstbijzijnde gehele getal met behulp van de opgegeven afrondingsmodus.

Round(Single)

Rondt een waarde af op het dichtstbijzijnde gehele getal met behulp van de standaard afrondingsmodus (ToEven).

ScaleB(Single, Int32)

Berekent het product van een waarde en de basis-radix die tot de opgegeven macht zijn verheven.

Sign(Single)

Berekent het teken van een waarde.

Sin(Single)

Berekent de sinus van een waarde.

SinCos(Single)

Berekent de sinus en cosinus van een waarde.

SinCosPi(Single)

Berekent de sinus en cosinus van een waarde.

Sinh(Single)

Berekent de sinus hyperbolicus van een waarde.

SinPi(Single)

Berekent de sinus van een waarde die is vermenigvuldigd met pi.

Sqrt(Single)

Berekent de vierkantswortel van een waarde.

Tan(Single)

Berekent de tangens van een waarde.

Tanh(Single)

Berekent de tangens hyperbolicus van een waarde.

TanPi(Single)

Berekent de tangens van een waarde die is vermenigvuldigd door pi.

ToString()

Converteert de numerieke waarde van dit exemplaar naar de equivalente tekenreeksweergave.

ToString(IFormatProvider)

Converteert de numerieke waarde van dit exemplaar naar de equivalente tekenreeksweergave met behulp van de opgegeven cultuurspecifieke notatiegegevens.

ToString(String, IFormatProvider)

Converteert de numerieke waarde van dit exemplaar naar de equivalente tekenreeksweergave met behulp van de opgegeven indeling en cultuurspecifieke notatiegegevens.

ToString(String)

Converteert de numerieke waarde van dit exemplaar naar de equivalente tekenreeksweergave, met behulp van de opgegeven indeling.

Truncate(Single)

Kapt een waarde af.

TryFormat(Span<Byte>, Int32, ReadOnlySpan<Char>, IFormatProvider)

Probeert de waarde van het huidige exemplaar op te maken als UTF-8 in het opgegeven bereik van bytes.

TryFormat(Span<Char>, Int32, ReadOnlySpan<Char>, IFormatProvider)

Hiermee wordt geprobeerd de waarde van het huidige float-getalexemplaren op te maken in de opgegeven reeks tekens.

TryParse(ReadOnlySpan<Byte>, IFormatProvider, Single)

Probeert een reeks UTF-8 tekens te parseren in een waarde.

TryParse(ReadOnlySpan<Byte>, NumberStyles, IFormatProvider, Single)

Probeert een reeks UTF-8 tekens te parseren in een waarde.

TryParse(ReadOnlySpan<Byte>, Single)

Hiermee wordt geprobeerd een UTF-8-tekenbereik te converteren dat de tekenreeksweergave van een getal bevat naar het equivalent van een drijvendekommagetal met één precisie.

TryParse(ReadOnlySpan<Char>, IFormatProvider, Single)

Probeert een reeks tekens te parseren in een waarde.

TryParse(ReadOnlySpan<Char>, NumberStyles, IFormatProvider, Single)

Converteert de spanweergave van een getal in een opgegeven stijl en cultuurspecifieke notatie naar het equivalent van drijvendekommagetal met één precisie. Een retourwaarde geeft aan of de conversie is geslaagd of mislukt.

TryParse(ReadOnlySpan<Char>, Single)

Converteert de tekenreeksweergave van een getal in een tekenbereik naar het equivalent van een drijvendekommagetal met één precisie. Een retourwaarde geeft aan of de conversie is geslaagd of mislukt.

TryParse(String, IFormatProvider, Single)

Probeert een tekenreeks te parseren in een waarde.

TryParse(String, NumberStyles, IFormatProvider, Single)

Converteert de tekenreeksweergave van een getal in een opgegeven stijl en cultuurspecifieke notatie naar het equivalent van drijvendekommagetal met één precisie. Een retourwaarde geeft aan of de conversie is geslaagd of mislukt.

TryParse(String, Single)

Converteert de tekenreeksweergave van een getal naar het equivalent van een drijvendekommagetal met één precisie. Een retourwaarde geeft aan of de conversie is geslaagd of mislukt.

Operators

Name Description
Equality(Single, Single)

Retourneert een waarde die aangeeft of twee opgegeven Single waarden gelijk zijn.

GreaterThan(Single, Single)

Retourneert een waarde die aangeeft of een opgegeven Single waarde groter is dan een andere opgegeven Single waarde.

GreaterThanOrEqual(Single, Single)

Retourneert een waarde die aangeeft of een opgegeven Single waarde groter is dan of gelijk is aan een andere opgegeven Single waarde.

Inequality(Single, Single)

Retourneert een waarde die aangeeft of twee opgegeven Single waarden niet gelijk zijn.

LessThan(Single, Single)

Retourneert een waarde die aangeeft of een opgegeven Single waarde kleiner is dan een andere opgegeven Single waarde.

LessThanOrEqual(Single, Single)

Retourneert een waarde die aangeeft of een opgegeven Single waarde kleiner is dan of gelijk is aan een andere opgegeven Single waarde.

Expliciete interface-implementaties

Name Description
IAdditionOperators<Single,Single,Single>.Addition(Single, Single)

Voegt twee waarden samen om de som te berekenen.

IAdditiveIdentity<Single,Single>.AdditiveIdentity

Hiermee haalt u de additieve identiteit van het huidige type op.

IBinaryNumber<Single>.AllBitsSet

Hiermee haalt u een exemplaar op van het binaire type waarin alle bits zijn ingesteld.

IBitwiseOperators<Single,Single,Single>.BitwiseAnd(Single, Single)

Berekent de bitsgewijze en van twee waarden.

IBitwiseOperators<Single,Single,Single>.BitwiseOr(Single, Single)

Berekent de bitsgewijze of twee waarden.

IBitwiseOperators<Single,Single,Single>.ExclusiveOr(Single, Single)

Berekent de exclusieve of twee waarden.

IBitwiseOperators<Single,Single,Single>.OnesComplement(Single)

Berekent de een-complementweergave van een bepaalde waarde.

IComparable.CompareTo(Object)

Vergelijkt het huidige exemplaar met een ander object van hetzelfde type en retourneert een geheel getal dat aangeeft of de huidige instantie voorafgaat aan, volgt of zich op dezelfde positie in de sorteervolgorde bevindt als het andere object.

IConvertible.GetTypeCode()

Retourneert het TypeCode voor dit exemplaar.

IConvertible.ToBoolean(IFormatProvider)

Zie voor een beschrijving van dit lid ToBoolean(IFormatProvider).

IConvertible.ToByte(IFormatProvider)

Zie voor een beschrijving van dit lid ToByte(IFormatProvider).

IConvertible.ToChar(IFormatProvider)

Deze conversie wordt niet ondersteund. Als u deze methode probeert te gebruiken, wordt er een InvalidCastException.

IConvertible.ToDateTime(IFormatProvider)

Deze conversie wordt niet ondersteund. Als u deze methode probeert te gebruiken, wordt er een InvalidCastException.

IConvertible.ToDecimal(IFormatProvider)

Zie voor een beschrijving van dit lid ToDecimal(IFormatProvider).

IConvertible.ToDouble(IFormatProvider)

Zie voor een beschrijving van dit lid ToDouble(IFormatProvider).

IConvertible.ToInt16(IFormatProvider)

Zie voor een beschrijving van dit lid ToInt16(IFormatProvider).

IConvertible.ToInt32(IFormatProvider)

Zie voor een beschrijving van dit lid ToInt32(IFormatProvider).

IConvertible.ToInt64(IFormatProvider)

Zie voor een beschrijving van dit lid ToInt64(IFormatProvider).

IConvertible.ToSByte(IFormatProvider)

Zie voor een beschrijving van dit lid ToSByte(IFormatProvider).

IConvertible.ToSingle(IFormatProvider)

Zie voor een beschrijving van dit lid ToSingle(IFormatProvider).

IConvertible.ToType(Type, IFormatProvider)

Zie voor een beschrijving van dit lid ToType(Type, IFormatProvider).

IConvertible.ToUInt16(IFormatProvider)

Zie voor een beschrijving van dit lid ToUInt16(IFormatProvider).

IConvertible.ToUInt32(IFormatProvider)

Zie voor een beschrijving van dit lid ToUInt32(IFormatProvider).

IConvertible.ToUInt64(IFormatProvider)

Zie voor een beschrijving van dit lid ToUInt64(IFormatProvider).

IDecrementOperators<Single>.Decrement(Single)

Een waarde verlagen.

IDivisionOperators<Single,Single,Single>.Division(Single, Single)

Verdeelt de ene waarde door een andere om het quotiënt te berekenen.

IFloatingPoint<Single>.GetExponentByteCount()

Hiermee haalt u het aantal bytes op dat wordt geschreven als onderdeel van TryWriteExponentLittleEndian(Span<Byte>, Int32).

IFloatingPoint<Single>.GetExponentShortestBitLength()

Hiermee haalt u de lengte, in bits, van de kortste twee's complementweergave van de huidige exponent.

IFloatingPoint<Single>.GetSignificandBitLength()

Hiermee wordt de lengte, in bits, van de huidige significand.

IFloatingPoint<Single>.GetSignificandByteCount()

Hiermee haalt u het aantal bytes op dat wordt geschreven als onderdeel van TryWriteSignificandLittleEndian(Span<Byte>, Int32).

IFloatingPoint<Single>.TryWriteExponentBigEndian(Span<Byte>, Int32)

Probeert de huidige exponent, in big-endian-indeling, naar een bepaalde periode te schrijven.

IFloatingPoint<Single>.TryWriteExponentLittleEndian(Span<Byte>, Int32)

Probeert de huidige exponent, in little-endian-indeling, naar een bepaalde periode te schrijven.

IFloatingPoint<Single>.TryWriteSignificandBigEndian(Span<Byte>, Int32)

Probeert het huidige teken te schrijven, in big-endian-indeling, naar een bepaalde periode.

IFloatingPoint<Single>.TryWriteSignificandLittleEndian(Span<Byte>, Int32)

Probeert het huidige teken te schrijven, in little-endian-indeling, naar een bepaalde periode.

IFloatingPointConstants<Single>.E

Hiermee haalt u de wiskundige constante eop.

IFloatingPointConstants<Single>.Pi

Hiermee haalt u de wiskundige constante piop.

IFloatingPointConstants<Single>.Tau

Hiermee haalt u de wiskundige constante tauop.

IFloatingPointIeee754<Single>.Epsilon

Hiermee haalt u de kleinste waarde op die kan worden toegevoegd aan 0 dat niet resulteert in 0.

IFloatingPointIeee754<Single>.NaN

Hiermee haalt u een waarde op die staat voor NaN.

IFloatingPointIeee754<Single>.NegativeInfinity

Hiermee wordt een waarde opgehaald die een negatieve infinitywaarde vertegenwoordigt.

IFloatingPointIeee754<Single>.NegativeZero

Hiermee wordt een waarde opgehaald die een negatieve zerowaarde vertegenwoordigt.

IFloatingPointIeee754<Single>.PositiveInfinity

Hiermee wordt een waarde opgehaald die positief infinityvertegenwoordigt.

IIncrementOperators<Single>.Increment(Single)

Hiermee wordt een waarde verhoogd.

IMinMaxValue<Single>.MaxValue

Hiermee wordt de maximumwaarde van het huidige type opgehaald.

IMinMaxValue<Single>.MinValue

Hiermee wordt de minimumwaarde van het huidige type opgehaald.

IModulusOperators<Single,Single,Single>.Modulus(Single, Single)

Verdeelt twee waarden samen om hun modulus of restgetal te berekenen.

IMultiplicativeIdentity<Single,Single>.MultiplicativeIdentity

Hiermee haalt u de vermenigvuldigende identiteit van het huidige type op.

IMultiplyOperators<Single,Single,Single>.Multiply(Single, Single)

Vermenigvuldigt twee waarden samen om het product te berekenen.

INumberBase<Single>.IsCanonical(Single)

Bepaalt of een waarde zich in de canonieke weergave bevindt.

INumberBase<Single>.IsComplexNumber(Single)

Bepaalt of een waarde een complex getal vertegenwoordigt.

INumberBase<Single>.IsImaginaryNumber(Single)

Bepaalt of een waarde een puur imaginair getal vertegenwoordigt.

INumberBase<Single>.IsZero(Single)

Bepaalt of een waarde nul is.

INumberBase<Single>.One

Hiermee haalt u de waarde 1 voor het type op.

INumberBase<Single>.Radix

Bepaalt de radix of basis voor een type.

INumberBase<Single>.TryConvertFromChecked<TOther>(TOther, Single)

Vertegenwoordigt een drijvendekommagetal met enkele precisie.

INumberBase<Single>.TryConvertFromSaturating<TOther>(TOther, Single)

Vertegenwoordigt een drijvendekommagetal met enkele precisie.

INumberBase<Single>.TryConvertFromTruncating<TOther>(TOther, Single)

Vertegenwoordigt een drijvendekommagetal met enkele precisie.

INumberBase<Single>.TryConvertToChecked<TOther>(Single, TOther)

Probeert een exemplaar van het huidige type te converteren naar een ander type, waardoor een overloop-uitzondering wordt gegenereerd voor waarden die buiten het vertegenwoordigbare bereik van het huidige type vallen.

INumberBase<Single>.TryConvertToSaturating<TOther>(Single, TOther)

Hiermee wordt geprobeerd een exemplaar van het huidige type te converteren naar een ander type, waarbij alle waarden die buiten het vertegenwoordigbare bereik van het huidige type vallen, worden verzadigingswaarden weergegeven.

INumberBase<Single>.TryConvertToTruncating<TOther>(Single, TOther)

Hiermee wordt geprobeerd een exemplaar van het huidige type te converteren naar een ander type, waarbij alle waarden worden afgekapt die buiten het vertegenwoordigbare bereik van het huidige type vallen.

INumberBase<Single>.Zero

Hiermee haalt u de waarde 0 voor het type op.

ISignedNumber<Single>.NegativeOne

Hiermee haalt u de waarde -1 voor het type op.

ISubtractionOperators<Single,Single,Single>.Subtraction(Single, Single)

Trekt twee waarden af om het verschil te berekenen.

IUnaryNegationOperators<Single,Single>.UnaryNegation(Single)

Berekent de unaire negatie van een waarde.

IUnaryPlusOperators<Single,Single>.UnaryPlus(Single)

Berekent het unaire plusteken van een waarde.

Van toepassing op

Veiligheid thread

Alle leden van dit type zijn thread-veilig. Leden die de exemplaarstatus lijken te wijzigen, retourneren daadwerkelijk een nieuw exemplaar dat is geïnitialiseerd met de nieuwe waarde. Net als bij elk ander type moet lezen en schrijven naar een gedeelde variabele die een exemplaar van dit type bevat, worden beveiligd door een vergrendeling om de veiligheid van threads te garanderen.

Zie ook