Legend

Class
Struct
Enum
Interface
Delegate
Constructor
Method
Property
Event
Field

Extension method: void WriteDecimalOptim(this Stream, decimal)

Declaration

public static void WriteDecimalOptim(
    this Stream stream,
    decimal val
)

Summary

Encodes a decimal in a variable number of bytes, using fewer bytes for frequently-occurring low-precision values.

Remarks

The first byte is a "header" byte. Its top bit indicates the sign of the value, while the remaining 7 bits encode the scale and the length, in bytes, of the mantissa component. Since the scale can be anything between 0..28 and the length can be up to 12, this number is simply an index into a lookup table which contains specific combinations of both values. These combinations were selected by analyzing the actual distribution of mantissa length + exponent pairs making a few assumptions about the likely inputs into arithmetic operations. The encoder makes sure to select a value representing the exact scale and the minimum representable mantissa length.

The result is always at most 13 bytes long, which is the same as discarding the three unused bytes of the raw representation.