Doubles.constrainToRange(double,double,double) and Floats.constrainToRange(float,float,float) both cause unnecessary boxing of their arguments. Both call Preconditions.checkArgument(boolean, String, **Object**, **Object**) which causes the boxing.

Can be easily fixed by introducing an overloaded version of checkArgument for floats and doubles. For ints and longs these versions already exist:
Preconditions.checkArgument(boolean, String, **int**, **int**)
Preconditions.checkArgument(boolean, String, **long**, **long**)
which is also why constrainToRange does not have the same problem in the Ints, Shorts & Longs packages.
implements SetMultimap<K, V>, Serializable {
    final Map<K, V> map;
    MapMultimap(Map<K, V> map) {
      this.map = checkNotNull(map);
    }
    @Override
    public int size() {
      return map.size();
    }
    @Override
    public boolean containsKey(Object key) {
      return map.containsKey(key);
    }
    @Override
    public boolean containsValue(Object value) {
      return map.containsValue(value);
    }
    @Override
    public boolean containsEntry(Object key, Object value) {
      return map.entrySet().contains(Maps.immutableEntry(key, value));
    }
    @Override