anchor.diff:      fp64
     ];
   
  -  String toString() => '${sign ?? ''}$memoryInterpretation${sizeInBits}';
  +  String toString() => memoryInterpretation == float
  +      ? sizeInBytes == 4 ? 'float' : 'double'
  +      : '${memoryInterpretation}int$sizeInBits';
   }
   
   /// Wrapper class around [ByteData]. Its only purpose is to map a [NumberType]
  
positive.code: /// Return the number of bytes required to represent `n` values.
  int calculateRequiredBytes(int n) => (log(n) / log(256)).ceil();
  
  /// Possible ways to interpret buffer.
  ///
  /// Other number encodings are not supported by [ByteData], so we don't support
  /// them either.
  class NumberType {
    static const String unsigned = 'u';
    static const String signed = 's';
  
    /// Number of bytes required to store a value of this type.
    final int sizeInBytes;
  
negative.code:   /// Insert value into [buffer] at the specified address, encoded as the
    /// specified number type.
    void setValue(int address, NumberType numberType, num value) {
      if (numberType.memoryInterpretation == NumberType.float)
        value = value.toDouble();
      else
        value = value.toInt();
  