View Javadoc
1   package org.djunits.value.vfloat.scalar;
2   
3   import java.util.Locale;
4   
5   import org.djunits.unit.AbsorbedDoseUnit;
6   import org.djunits.unit.AccelerationUnit;
7   import org.djunits.unit.AmountOfSubstanceUnit;
8   import org.djunits.unit.AngleUnit;
9   import org.djunits.unit.AreaUnit;
10  import org.djunits.unit.CatalyticActivityUnit;
11  import org.djunits.unit.DensityUnit;
12  import org.djunits.unit.DimensionlessUnit;
13  import org.djunits.unit.DurationUnit;
14  import org.djunits.unit.ElectricalCapacitanceUnit;
15  import org.djunits.unit.ElectricalChargeUnit;
16  import org.djunits.unit.ElectricalConductanceUnit;
17  import org.djunits.unit.ElectricalCurrentUnit;
18  import org.djunits.unit.ElectricalInductanceUnit;
19  import org.djunits.unit.ElectricalPotentialUnit;
20  import org.djunits.unit.ElectricalResistanceUnit;
21  import org.djunits.unit.EnergyUnit;
22  import org.djunits.unit.EquivalentDoseUnit;
23  import org.djunits.unit.FlowMassUnit;
24  import org.djunits.unit.FlowVolumeUnit;
25  import org.djunits.unit.ForceUnit;
26  import org.djunits.unit.FrequencyUnit;
27  import org.djunits.unit.IlluminanceUnit;
28  import org.djunits.unit.LengthUnit;
29  import org.djunits.unit.LinearDensityUnit;
30  import org.djunits.unit.LuminousFluxUnit;
31  import org.djunits.unit.LuminousIntensityUnit;
32  import org.djunits.unit.MagneticFluxDensityUnit;
33  import org.djunits.unit.MagneticFluxUnit;
34  import org.djunits.unit.MassUnit;
35  import org.djunits.unit.PowerUnit;
36  import org.djunits.unit.PressureUnit;
37  import org.djunits.unit.RadioActivityUnit;
38  import org.djunits.unit.SolidAngleUnit;
39  import org.djunits.unit.SpeedUnit;
40  import org.djunits.unit.TemperatureUnit;
41  import org.djunits.unit.TorqueUnit;
42  import org.djunits.unit.VolumeUnit;
43  import org.djunits.value.function.DimensionlessFunctions;
44  import org.djunits.value.vfloat.scalar.base.FloatScalarRel;
45  import org.djutils.base.NumberParser;
46  import org.djutils.exceptions.Throw;
47  
48  import jakarta.annotation.Generated;
49  
50  /**
51   * Easy access methods for the FloatDimensionless FloatScalar, which is relative by definition.
52   * <p>
53   * Copyright (c) 2013-2025 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
54   * BSD-style license. See <a href="https://djunits.org/docs/license.html">DJUNITS License</a>.
55   * </p>
56   * @author <a href="https://www.tudelft.nl/averbraeck">Alexander Verbraeck</a>
57   * @author <a href="https://www.tudelft.nl/staff/p.knoppers/">Peter Knoppers</a>
58   */
59  @Generated(value = "org.djunits.generator.GenerateDJUNIT", date = "2025-09-06T15:16:28.380798Z")
60  public class FloatDimensionless extends FloatScalarRel<DimensionlessUnit, FloatDimensionless>
61          implements DimensionlessFunctions<DimensionlessUnit, FloatDimensionless>
62  {
63      /** */
64      private static final long serialVersionUID = 20150901L;
65  
66      /** Constant with value zero. */
67      public static final FloatDimensionless ZERO = new FloatDimensionless(0.0f, DimensionlessUnit.SI);
68  
69      /** Constant with value one. */
70      public static final FloatDimensionless ONE = new FloatDimensionless(1.0f, DimensionlessUnit.SI);
71  
72      /** Constant with value NaN. */
73      @SuppressWarnings("checkstyle:constantname")
74      public static final FloatDimensionless NaN = new FloatDimensionless(Float.NaN, DimensionlessUnit.SI);
75  
76      /** Constant with value POSITIVE_INFINITY. */
77      public static final FloatDimensionless POSITIVE_INFINITY =
78              new FloatDimensionless(Float.POSITIVE_INFINITY, DimensionlessUnit.SI);
79  
80      /** Constant with value NEGATIVE_INFINITY. */
81      public static final FloatDimensionless NEGATIVE_INFINITY =
82              new FloatDimensionless(Float.NEGATIVE_INFINITY, DimensionlessUnit.SI);
83  
84      /** Constant with value MAX_VALUE. */
85      public static final FloatDimensionless POS_MAXVALUE = new FloatDimensionless(Float.MAX_VALUE, DimensionlessUnit.SI);
86  
87      /** Constant with value -MAX_VALUE. */
88      public static final FloatDimensionless NEG_MAXVALUE = new FloatDimensionless(-Float.MAX_VALUE, DimensionlessUnit.SI);
89  
90      /**
91       * Construct FloatDimensionless scalar with a unit.
92       * @param value the float value, expressed in the given unit
93       * @param unit unit for the float value
94       */
95      public FloatDimensionless(final float value, final DimensionlessUnit unit)
96      {
97          super(value, unit);
98      }
99  
100     /**
101      * Construct FloatDimensionless scalar.
102      * @param value Scalar from which to construct this instance
103      */
104     public FloatDimensionless(final FloatDimensionless value)
105     {
106         super(value);
107     }
108 
109     /**
110      * Construct FloatDimensionless scalar with a unit using a double value.
111      * @param value the double value, expressed in the given unit
112      * @param unit unit for the resulting float value
113      */
114     public FloatDimensionless(final double value, final DimensionlessUnit unit)
115     {
116         super((float) value, unit);
117     }
118 
119     @Override
120     public final FloatDimensionless instantiateRel(final float value, final DimensionlessUnit unit)
121     {
122         return new FloatDimensionless(value, unit);
123     }
124 
125     /**
126      * Construct FloatDimensionless scalar based on an SI value.
127      * @param value the float value in SI units
128      * @return the new scalar with the SI value
129      */
130     public static final FloatDimensionless ofSI(final float value)
131     {
132         return new FloatDimensionless(value, DimensionlessUnit.SI);
133     }
134 
135     /**
136      * Interpolate between two values. Note that the first value does not have to be smaller than the second.
137      * @param zero the value at a ratio of zero
138      * @param one the value at a ratio of one
139      * @param ratio the ratio between 0 and 1, inclusive
140      * @return a FloatDimensionless at the given ratio between 0 and 1
141      */
142     public static FloatDimensionless interpolate(final FloatDimensionless zero, final FloatDimensionless one, final float ratio)
143     {
144         Throw.when(ratio < 0.0 || ratio > 1.0, IllegalArgumentException.class,
145                 "ratio for interpolation should be between 0 and 1, but is %f", ratio);
146         return new FloatDimensionless(zero.getInUnit() * (1 - ratio) + one.getInUnit(zero.getDisplayUnit()) * ratio,
147                 zero.getDisplayUnit());
148     }
149 
150     /**
151      * Return the maximum value of two relative scalars.
152      * @param r1 the first scalar
153      * @param r2 the second scalar
154      * @return the maximum value of two relative scalars
155      */
156     public static FloatDimensionless max(final FloatDimensionless r1, final FloatDimensionless r2)
157     {
158         return r1.gt(r2) ? r1 : r2;
159     }
160 
161     /**
162      * Return the maximum value of more than two relative scalars.
163      * @param r1 the first scalar
164      * @param r2 the second scalar
165      * @param rn the other scalars
166      * @return the maximum value of more than two relative scalars
167      */
168     public static FloatDimensionless max(final FloatDimensionless r1, final FloatDimensionless r2,
169             final FloatDimensionless... rn)
170     {
171         FloatDimensionless maxr = r1.gt(r2) ? r1 : r2;
172         for (FloatDimensionless r : rn)
173         {
174             if (r.gt(maxr))
175             {
176                 maxr = r;
177             }
178         }
179         return maxr;
180     }
181 
182     /**
183      * Return the minimum value of two relative scalars.
184      * @param r1 the first scalar
185      * @param r2 the second scalar
186      * @return the minimum value of two relative scalars
187      */
188     public static FloatDimensionless min(final FloatDimensionless r1, final FloatDimensionless r2)
189     {
190         return r1.lt(r2) ? r1 : r2;
191     }
192 
193     /**
194      * Return the minimum value of more than two relative scalars.
195      * @param r1 the first scalar
196      * @param r2 the second scalar
197      * @param rn the other scalars
198      * @return the minimum value of more than two relative scalars
199      */
200     public static FloatDimensionless min(final FloatDimensionless r1, final FloatDimensionless r2,
201             final FloatDimensionless... rn)
202     {
203         FloatDimensionless minr = r1.lt(r2) ? r1 : r2;
204         for (FloatDimensionless r : rn)
205         {
206             if (r.lt(minr))
207             {
208                 minr = r;
209             }
210         }
211         return minr;
212     }
213 
214     /**
215      * Returns a FloatDimensionless representation of a textual representation of a value with a unit. The String representation
216      * that can be parsed is the double value in the unit, followed by a localized or English abbreviation of the unit. Spaces
217      * are allowed, but not required, between the value and the unit.
218      * @param text the textual representation to parse into a FloatDimensionless
219      * @return the Scalar representation of the value in its unit
220      * @throws IllegalArgumentException when the text cannot be parsed
221      * @throws NullPointerException when the text argument is null
222      */
223     public static FloatDimensionless valueOf(final String text)
224     {
225         Throw.whenNull(text, "Error parsing FloatDimensionless: text to parse is null");
226         Throw.when(text.length() == 0, IllegalArgumentException.class, "Error parsing FloatDimensionless: empty text to parse");
227         try
228         {
229             NumberParser numberParser = new NumberParser().lenient().trailing();
230             float f = numberParser.parseFloat(text);
231             String unitString = text.substring(numberParser.getTrailingPosition()).trim();
232             Throw.when(unitString.length() != 0, IllegalArgumentException.class, "Dimensionless should not have unit %s",
233                     unitString);
234             return new FloatDimensionless(f, DimensionlessUnit.SI);
235         }
236         catch (Exception exception)
237         {
238             throw new IllegalArgumentException("Error parsing FloatDimensionless from " + text + " using Locale "
239                     + Locale.getDefault(Locale.Category.FORMAT), exception);
240         }
241     }
242 
243     /**
244      * Returns a FloatDimensionless based on a value and the textual representation of the unit, which can be localized.
245      * @param value the value to use
246      * @param unitString the textual representation of the unit
247      * @return the Scalar representation of the value in its unit
248      * @throws IllegalArgumentException when the unit cannot be parsed or is incorrect
249      * @throws NullPointerException when the unitString argument is null
250      */
251     public static FloatDimensionless of(final float value, final String unitString)
252     {
253         Throw.whenNull(unitString, "Error parsing FloatDimensionless: unitString is null");
254         Throw.when(unitString.trim().length() != 0, IllegalArgumentException.class,
255                 "Error parsing FloatDimensionless: non-empty unitString");
256         DimensionlessUnit unit = DimensionlessUnit.SI;
257         return new FloatDimensionless(value, unit);
258     }
259 
260     @Override
261     public String toStringSIPrefixed(final int smallestPower, final int biggestPower)
262     {
263         return toString();
264     }
265 
266     @Override
267     public final FloatDimensionless acos()
268     {
269         return instantiateRel((float) Math.acos(getInUnit()), getDisplayUnit());
270     }
271 
272     @Override
273     public final FloatDimensionless asin()
274     {
275         return instantiateRel((float) Math.asin(getInUnit()), getDisplayUnit());
276     }
277 
278     @Override
279     public final FloatDimensionless atan()
280     {
281         return instantiateRel((float) Math.atan(getInUnit()), getDisplayUnit());
282     }
283 
284     @Override
285     public final FloatDimensionless cbrt()
286     {
287         return instantiateRel((float) Math.cbrt(getInUnit()), getDisplayUnit());
288     }
289 
290     @Override
291     public final FloatDimensionless cos()
292     {
293         return instantiateRel((float) Math.cos(getInUnit()), getDisplayUnit());
294     }
295 
296     @Override
297     public final FloatDimensionless cosh()
298     {
299         return instantiateRel((float) Math.cosh(getInUnit()), getDisplayUnit());
300     }
301 
302     @Override
303     public final FloatDimensionless exp()
304     {
305         return instantiateRel((float) Math.exp(getInUnit()), getDisplayUnit());
306     }
307 
308     @Override
309     public final FloatDimensionless expm1()
310     {
311         return instantiateRel((float) Math.expm1(getInUnit()), getDisplayUnit());
312     }
313 
314     @Override
315     public final FloatDimensionless log()
316     {
317         return instantiateRel((float) Math.log(getInUnit()), getDisplayUnit());
318     }
319 
320     @Override
321     public final FloatDimensionless log10()
322     {
323         return instantiateRel((float) Math.log10(getInUnit()), getDisplayUnit());
324     }
325 
326     @Override
327     public final FloatDimensionless log1p()
328     {
329         return instantiateRel((float) Math.log1p(getInUnit()), getDisplayUnit());
330     }
331 
332     @Override
333     public final FloatDimensionless pow(final double x)
334     {
335         return instantiateRel((float) Math.pow(getInUnit(), x), getDisplayUnit());
336     }
337 
338     @Override
339     public final FloatDimensionless signum()
340     {
341         return instantiateRel(Math.signum(getInUnit()), getDisplayUnit());
342     }
343 
344     @Override
345     public final FloatDimensionless sin()
346     {
347         return instantiateRel((float) Math.sin(getInUnit()), getDisplayUnit());
348     }
349 
350     @Override
351     public final FloatDimensionless sinh()
352     {
353         return instantiateRel((float) Math.sinh(getInUnit()), getDisplayUnit());
354     }
355 
356     @Override
357     public final FloatDimensionless sqrt()
358     {
359         return instantiateRel((float) Math.sqrt(getInUnit()), getDisplayUnit());
360     }
361 
362     @Override
363     public final FloatDimensionless tan()
364     {
365         return instantiateRel((float) Math.tan(getInUnit()), getDisplayUnit());
366     }
367 
368     @Override
369     public final FloatDimensionless tanh()
370     {
371         return instantiateRel((float) Math.tanh(getInUnit()), getDisplayUnit());
372     }
373 
374     @Override
375     public final FloatDimensionless inv()
376     {
377         return instantiateRel(1.0f / getInUnit(), getDisplayUnit());
378     }
379 
380     /**
381      * Calculate the division of FloatDimensionless and FloatDimensionless, which results in a FloatDimensionless scalar.
382      * @param v scalar
383      * @return scalar as a division of FloatDimensionless and FloatDimensionless
384      */
385     public final FloatDimensionless divide(final FloatDimensionless v)
386     {
387         return new FloatDimensionless(this.si / v.si, DimensionlessUnit.SI);
388     }
389 
390     /**
391      * Calculate the multiplication of FloatDimensionless and FloatAbsorbedDose, which results in a FloatAbsorbedDose scalar.
392      * @param v scalar
393      * @return scalar as a multiplication of FloatDimensionless and FloatAbsorbedDose
394      */
395     public final FloatAbsorbedDose times(final FloatAbsorbedDose v)
396     {
397         return new FloatAbsorbedDose(this.si * v.si, AbsorbedDoseUnit.SI);
398     }
399 
400     /**
401      * Calculate the multiplication of FloatDimensionless and FloatAcceleration, which results in a FloatAcceleration scalar.
402      * @param v scalar
403      * @return scalar as a multiplication of FloatDimensionless and FloatAcceleration
404      */
405     public final FloatAcceleration times(final FloatAcceleration v)
406     {
407         return new FloatAcceleration(this.si * v.si, AccelerationUnit.SI);
408     }
409 
410     /**
411      * Calculate the multiplication of FloatDimensionless and FloatAmountOfSubstance, which results in a FloatAmountOfSubstance
412      * scalar.
413      * @param v scalar
414      * @return scalar as a multiplication of FloatDimensionless and FloatAmountOfSubstance
415      */
416     public final FloatAmountOfSubstance times(final FloatAmountOfSubstance v)
417     {
418         return new FloatAmountOfSubstance(this.si * v.si, AmountOfSubstanceUnit.SI);
419     }
420 
421     /**
422      * Calculate the multiplication of FloatDimensionless and FloatAngle, which results in a FloatAngle scalar.
423      * @param v scalar
424      * @return scalar as a multiplication of FloatDimensionless and FloatAngle
425      */
426     public final FloatAngle times(final FloatAngle v)
427     {
428         return new FloatAngle(this.si * v.si, AngleUnit.SI);
429     }
430 
431     /**
432      * Calculate the multiplication of FloatDimensionless and FloatSolidAngle, which results in a FloatSolidAngle scalar.
433      * @param v scalar
434      * @return scalar as a multiplication of FloatDimensionless and FloatSolidAngle
435      */
436     public final FloatSolidAngle times(final FloatSolidAngle v)
437     {
438         return new FloatSolidAngle(this.si * v.si, SolidAngleUnit.SI);
439     }
440 
441     /**
442      * Calculate the multiplication of FloatDimensionless and FloatArea, which results in a FloatArea scalar.
443      * @param v scalar
444      * @return scalar as a multiplication of FloatDimensionless and FloatArea
445      */
446     public final FloatArea times(final FloatArea v)
447     {
448         return new FloatArea(this.si * v.si, AreaUnit.SI);
449     }
450 
451     /**
452      * Calculate the multiplication of FloatDimensionless and FloatCatalyticActivity, which results in a FloatCatalyticActivity
453      * scalar.
454      * @param v scalar
455      * @return scalar as a multiplication of FloatDimensionless and FloatCatalyticActivity
456      */
457     public final FloatCatalyticActivity times(final FloatCatalyticActivity v)
458     {
459         return new FloatCatalyticActivity(this.si * v.si, CatalyticActivityUnit.SI);
460     }
461 
462     /**
463      * Calculate the multiplication of FloatDimensionless and FloatDensity, which results in a FloatDensity scalar.
464      * @param v scalar
465      * @return scalar as a multiplication of FloatDimensionless and FloatDensity
466      */
467     public final FloatDensity times(final FloatDensity v)
468     {
469         return new FloatDensity(this.si * v.si, DensityUnit.SI);
470     }
471 
472     /**
473      * Calculate the multiplication of FloatDimensionless and FloatDimensionless, which results in a FloatDimensionless scalar.
474      * @param v scalar
475      * @return scalar as a multiplication of FloatDimensionless and FloatDimensionless
476      */
477     public final FloatDimensionless times(final FloatDimensionless v)
478     {
479         return new FloatDimensionless(this.si * v.si, DimensionlessUnit.SI);
480     }
481 
482     /**
483      * Calculate the multiplication of FloatDimensionless and FloatElectricalCapacitance, which results in a
484      * FloatElectricalCapacitance scalar.
485      * @param v scalar
486      * @return scalar as a multiplication of FloatDimensionless and FloatElectricalCapacitance
487      */
488     public final FloatElectricalCapacitance times(final FloatElectricalCapacitance v)
489     {
490         return new FloatElectricalCapacitance(this.si * v.si, ElectricalCapacitanceUnit.SI);
491     }
492 
493     /**
494      * Calculate the multiplication of FloatDimensionless and FloatElectricalCharge, which results in a FloatElectricalCharge
495      * scalar.
496      * @param v scalar
497      * @return scalar as a multiplication of FloatDimensionless and FloatElectricalCharge
498      */
499     public final FloatElectricalCharge times(final FloatElectricalCharge v)
500     {
501         return new FloatElectricalCharge(this.si * v.si, ElectricalChargeUnit.SI);
502     }
503 
504     /**
505      * Calculate the multiplication of FloatDimensionless and FloatElectricalConductance, which results in a
506      * FloatElectricalConductance scalar.
507      * @param v scalar
508      * @return scalar as a multiplication of FloatDimensionless and FloatElectricalConductance
509      */
510     public final FloatElectricalConductance times(final FloatElectricalConductance v)
511     {
512         return new FloatElectricalConductance(this.si * v.si, ElectricalConductanceUnit.SI);
513     }
514 
515     /**
516      * Calculate the multiplication of FloatDimensionless and FloatElectricalCurrent, which results in a FloatElectricalCurrent
517      * scalar.
518      * @param v scalar
519      * @return scalar as a multiplication of FloatDimensionless and FloatElectricalCurrent
520      */
521     public final FloatElectricalCurrent times(final FloatElectricalCurrent v)
522     {
523         return new FloatElectricalCurrent(this.si * v.si, ElectricalCurrentUnit.SI);
524     }
525 
526     /**
527      * Calculate the multiplication of FloatDimensionless and FloatElectricalInductance, which results in a
528      * FloatElectricalInductance scalar.
529      * @param v scalar
530      * @return scalar as a multiplication of FloatDimensionless and FloatElectricalInductance
531      */
532     public final FloatElectricalInductance times(final FloatElectricalInductance v)
533     {
534         return new FloatElectricalInductance(this.si * v.si, ElectricalInductanceUnit.SI);
535     }
536 
537     /**
538      * Calculate the multiplication of FloatDimensionless and FloatElectricalPotential, which results in a
539      * FloatElectricalPotential scalar.
540      * @param v scalar
541      * @return scalar as a multiplication of FloatDimensionless and FloatElectricalPotential
542      */
543     public final FloatElectricalPotential times(final FloatElectricalPotential v)
544     {
545         return new FloatElectricalPotential(this.si * v.si, ElectricalPotentialUnit.SI);
546     }
547 
548     /**
549      * Calculate the multiplication of FloatDimensionless and FloatElectricalResistance, which results in a
550      * FloatElectricalResistance scalar.
551      * @param v scalar
552      * @return scalar as a multiplication of FloatDimensionless and FloatElectricalResistance
553      */
554     public final FloatElectricalResistance times(final FloatElectricalResistance v)
555     {
556         return new FloatElectricalResistance(this.si * v.si, ElectricalResistanceUnit.SI);
557     }
558 
559     /**
560      * Calculate the multiplication of FloatDimensionless and FloatEnergy, which results in a FloatEnergy scalar.
561      * @param v scalar
562      * @return scalar as a multiplication of FloatDimensionless and FloatEnergy
563      */
564     public final FloatEnergy times(final FloatEnergy v)
565     {
566         return new FloatEnergy(this.si * v.si, EnergyUnit.SI);
567     }
568 
569     /**
570      * Calculate the multiplication of FloatDimensionless and FloatEquivalentDose, which results in a FloatEquivalentDose
571      * scalar.
572      * @param v scalar
573      * @return scalar as a multiplication of FloatDimensionless and FloatEquivalentDose
574      */
575     public final FloatEquivalentDose times(final FloatEquivalentDose v)
576     {
577         return new FloatEquivalentDose(this.si * v.si, EquivalentDoseUnit.SI);
578     }
579 
580     /**
581      * Calculate the multiplication of FloatDimensionless and FloatFlowMass, which results in a FloatFlowMass scalar.
582      * @param v scalar
583      * @return scalar as a multiplication of FloatDimensionless and FloatFlowMass
584      */
585     public final FloatFlowMass times(final FloatFlowMass v)
586     {
587         return new FloatFlowMass(this.si * v.si, FlowMassUnit.SI);
588     }
589 
590     /**
591      * Calculate the multiplication of FloatDimensionless and FloatFlowVolume, which results in a FloatFlowVolume scalar.
592      * @param v scalar
593      * @return scalar as a multiplication of FloatDimensionless and FloatFlowVolume
594      */
595     public final FloatFlowVolume times(final FloatFlowVolume v)
596     {
597         return new FloatFlowVolume(this.si * v.si, FlowVolumeUnit.SI);
598     }
599 
600     /**
601      * Calculate the multiplication of FloatDimensionless and FloatForce, which results in a FloatForce scalar.
602      * @param v scalar
603      * @return scalar as a multiplication of FloatDimensionless and FloatForce
604      */
605     public final FloatForce times(final FloatForce v)
606     {
607         return new FloatForce(this.si * v.si, ForceUnit.SI);
608     }
609 
610     /**
611      * Calculate the multiplication of FloatDimensionless and FloatFrequency, which results in a FloatFrequency scalar.
612      * @param v scalar
613      * @return scalar as a multiplication of FloatDimensionless and FloatFrequency
614      */
615     public final FloatFrequency times(final FloatFrequency v)
616     {
617         return new FloatFrequency(this.si * v.si, FrequencyUnit.SI);
618     }
619 
620     /**
621      * Calculate the multiplication of FloatDimensionless and FloatIlluminance, which results in a FloatIlluminance scalar.
622      * @param v scalar
623      * @return scalar as a multiplication of FloatDimensionless and FloatIlluminance
624      */
625     public final FloatIlluminance times(final FloatIlluminance v)
626     {
627         return new FloatIlluminance(this.si * v.si, IlluminanceUnit.SI);
628     }
629 
630     /**
631      * Calculate the multiplication of FloatDimensionless and FloatLength, which results in a FloatLength scalar.
632      * @param v scalar
633      * @return scalar as a multiplication of FloatDimensionless and FloatLength
634      */
635     public final FloatLength times(final FloatLength v)
636     {
637         return new FloatLength(this.si * v.si, LengthUnit.SI);
638     }
639 
640     /**
641      * Calculate the multiplication of FloatDimensionless and FloatLinearDensity, which results in a FloatLinearDensity scalar.
642      * @param v scalar
643      * @return scalar as a multiplication of FloatDimensionless and FloatLinearDensity
644      */
645     public final FloatLinearDensity times(final FloatLinearDensity v)
646     {
647         return new FloatLinearDensity(this.si * v.si, LinearDensityUnit.SI);
648     }
649 
650     /**
651      * Calculate the multiplication of FloatDimensionless and FloatLuminousFlux, which results in a FloatLuminousFlux scalar.
652      * @param v scalar
653      * @return scalar as a multiplication of FloatDimensionless and FloatLuminousFlux
654      */
655     public final FloatLuminousFlux times(final FloatLuminousFlux v)
656     {
657         return new FloatLuminousFlux(this.si * v.si, LuminousFluxUnit.SI);
658     }
659 
660     /**
661      * Calculate the multiplication of FloatDimensionless and FloatLuminousIntensity, which results in a FloatLuminousIntensity
662      * scalar.
663      * @param v scalar
664      * @return scalar as a multiplication of FloatDimensionless and FloatLuminousIntensity
665      */
666     public final FloatLuminousIntensity times(final FloatLuminousIntensity v)
667     {
668         return new FloatLuminousIntensity(this.si * v.si, LuminousIntensityUnit.SI);
669     }
670 
671     /**
672      * Calculate the multiplication of FloatDimensionless and FloatMagneticFluxDensity, which results in a
673      * FloatMagneticFluxDensity scalar.
674      * @param v scalar
675      * @return scalar as a multiplication of FloatDimensionless and FloatMagneticFluxDensity
676      */
677     public final FloatMagneticFluxDensity times(final FloatMagneticFluxDensity v)
678     {
679         return new FloatMagneticFluxDensity(this.si * v.si, MagneticFluxDensityUnit.SI);
680     }
681 
682     /**
683      * Calculate the multiplication of FloatDimensionless and FloatMagneticFlux, which results in a FloatMagneticFlux scalar.
684      * @param v scalar
685      * @return scalar as a multiplication of FloatDimensionless and FloatMagneticFlux
686      */
687     public final FloatMagneticFlux times(final FloatMagneticFlux v)
688     {
689         return new FloatMagneticFlux(this.si * v.si, MagneticFluxUnit.SI);
690     }
691 
692     /**
693      * Calculate the multiplication of FloatDimensionless and FloatMass, which results in a FloatMass scalar.
694      * @param v scalar
695      * @return scalar as a multiplication of FloatDimensionless and FloatMass
696      */
697     public final FloatMass times(final FloatMass v)
698     {
699         return new FloatMass(this.si * v.si, MassUnit.SI);
700     }
701 
702     /**
703      * Calculate the multiplication of FloatDimensionless and FloatPower, which results in a FloatPower scalar.
704      * @param v scalar
705      * @return scalar as a multiplication of FloatDimensionless and FloatPower
706      */
707     public final FloatPower times(final FloatPower v)
708     {
709         return new FloatPower(this.si * v.si, PowerUnit.SI);
710     }
711 
712     /**
713      * Calculate the multiplication of FloatDimensionless and FloatPressure, which results in a FloatPressure scalar.
714      * @param v scalar
715      * @return scalar as a multiplication of FloatDimensionless and FloatPressure
716      */
717     public final FloatPressure times(final FloatPressure v)
718     {
719         return new FloatPressure(this.si * v.si, PressureUnit.SI);
720     }
721 
722     /**
723      * Calculate the multiplication of FloatDimensionless and FloatRadioActivity, which results in a FloatRadioActivity scalar.
724      * @param v scalar
725      * @return scalar as a multiplication of FloatDimensionless and FloatRadioActivity
726      */
727     public final FloatRadioActivity times(final FloatRadioActivity v)
728     {
729         return new FloatRadioActivity(this.si * v.si, RadioActivityUnit.SI);
730     }
731 
732     /**
733      * Calculate the multiplication of FloatDimensionless and FloatSpeed, which results in a FloatSpeed scalar.
734      * @param v scalar
735      * @return scalar as a multiplication of FloatDimensionless and FloatSpeed
736      */
737     public final FloatSpeed times(final FloatSpeed v)
738     {
739         return new FloatSpeed(this.si * v.si, SpeedUnit.SI);
740     }
741 
742     /**
743      * Calculate the multiplication of FloatDimensionless and FloatTemperature, which results in a FloatTemperature scalar.
744      * @param v scalar
745      * @return scalar as a multiplication of FloatDimensionless and FloatTemperature
746      */
747     public final FloatTemperature times(final FloatTemperature v)
748     {
749         return new FloatTemperature(this.si * v.si, TemperatureUnit.SI);
750     }
751 
752     /**
753      * Calculate the multiplication of FloatDimensionless and FloatDuration, which results in a FloatDuration scalar.
754      * @param v scalar
755      * @return scalar as a multiplication of FloatDimensionless and FloatDuration
756      */
757     public final FloatDuration times(final FloatDuration v)
758     {
759         return new FloatDuration(this.si * v.si, DurationUnit.SI);
760     }
761 
762     /**
763      * Calculate the multiplication of FloatDimensionless and FloatTorque, which results in a FloatTorque scalar.
764      * @param v scalar
765      * @return scalar as a multiplication of FloatDimensionless and FloatTorque
766      */
767     public final FloatTorque times(final FloatTorque v)
768     {
769         return new FloatTorque(this.si * v.si, TorqueUnit.SI);
770     }
771 
772     /**
773      * Calculate the multiplication of FloatDimensionless and FloatVolume, which results in a FloatVolume scalar.
774      * @param v scalar
775      * @return scalar as a multiplication of FloatDimensionless and FloatVolume
776      */
777     public final FloatVolume times(final FloatVolume v)
778     {
779         return new FloatVolume(this.si * v.si, VolumeUnit.SI);
780     }
781 
782     /**
783      * Calculate the division of FloatDimensionless and FloatLength, which results in a FloatLinearDensity scalar.
784      * @param v scalar
785      * @return scalar as a division of FloatDimensionless and FloatLength
786      */
787     public final FloatLinearDensity divide(final FloatLength v)
788     {
789         return new FloatLinearDensity(this.si / v.si, LinearDensityUnit.SI);
790     }
791 
792     /**
793      * Calculate the division of FloatDimensionless and FloatLinearDensity, which results in a FloatLength scalar.
794      * @param v scalar
795      * @return scalar as a division of FloatDimensionless and FloatLinearDensity
796      */
797     public final FloatLength divide(final FloatLinearDensity v)
798     {
799         return new FloatLength(this.si / v.si, LengthUnit.SI);
800     }
801 
802     /**
803      * Calculate the division of FloatDimensionless and FloatDuration, which results in a FloatFrequency scalar.
804      * @param v scalar
805      * @return scalar as a division of FloatDimensionless and FloatDuration
806      */
807     public final FloatFrequency divide(final FloatDuration v)
808     {
809         return new FloatFrequency(this.si / v.si, FrequencyUnit.SI);
810     }
811 
812     /**
813      * Calculate the division of FloatDimensionless and FloatFrequency, which results in a FloatDuration scalar.
814      * @param v scalar
815      * @return scalar as a division of FloatDimensionless and FloatFrequency
816      */
817     public final FloatDuration divide(final FloatFrequency v)
818     {
819         return new FloatDuration(this.si / v.si, DurationUnit.SI);
820     }
821 
822     /**
823      * Calculate the division of FloatDimensionless and FloatElectricalConductance, which results in a FloatElectricalResistance
824      * scalar.
825      * @param v scalar
826      * @return scalar as a division of FloatDimensionless and FloatElectricalConductance
827      */
828     public final FloatElectricalResistance divide(final FloatElectricalConductance v)
829     {
830         return new FloatElectricalResistance(this.si / v.si, ElectricalResistanceUnit.SI);
831     }
832 
833     /**
834      * Calculate the division of FloatDimensionless and FloatElectricalResistance, which results in a FloatElectricalConductance
835      * scalar.
836      * @param v scalar
837      * @return scalar as a division of FloatDimensionless and FloatElectricalResistance
838      */
839     public final FloatElectricalConductance divide(final FloatElectricalResistance v)
840     {
841         return new FloatElectricalConductance(this.si / v.si, ElectricalConductanceUnit.SI);
842     }
843 
844     @Override
845     public FloatDimensionless reciprocal()
846     {
847         return FloatDimensionless.ofSI(1.0f / this.si);
848     }
849 
850     /**
851      * Multiply two scalars that result in a scalar of type FloatDimensionless.
852      * @param scalar1 the first scalar
853      * @param scalar2 the second scalar
854      * @return the multiplication of both scalars as an instance of FloatDimensionless
855      */
856     public static FloatDimensionless multiply(final FloatScalarRel<?, ?> scalar1, final FloatScalarRel<?, ?> scalar2)
857     {
858         Throw.whenNull(scalar1, "scalar1 cannot be null");
859         Throw.whenNull(scalar2, "scalar2 cannot be null");
860         Throw.when(
861                 !scalar1.getDisplayUnit().getQuantity().getSiDimensions()
862                         .plus(scalar2.getDisplayUnit().getQuantity().getSiDimensions())
863                         .equals(DimensionlessUnit.BASE.getSiDimensions()),
864                 IllegalArgumentException.class, "Multiplying %s by %s does not result in instance of type FloatDimensionless",
865                 scalar1.toDisplayString(), scalar2.toDisplayString());
866         return new FloatDimensionless(scalar1.si * scalar2.si, DimensionlessUnit.SI);
867     }
868 
869     /**
870      * Divide two scalars that result in a scalar of type FloatDimensionless.
871      * @param scalar1 the first scalar
872      * @param scalar2 the second scalar
873      * @return the division of scalar1 by scalar2 as an instance of FloatDimensionless
874      */
875     public static FloatDimensionless divide(final FloatScalarRel<?, ?> scalar1, final FloatScalarRel<?, ?> scalar2)
876     {
877         Throw.whenNull(scalar1, "scalar1 cannot be null");
878         Throw.whenNull(scalar2, "scalar2 cannot be null");
879         Throw.when(
880                 !scalar1.getDisplayUnit().getQuantity().getSiDimensions()
881                         .minus(scalar2.getDisplayUnit().getQuantity().getSiDimensions())
882                         .equals(DimensionlessUnit.BASE.getSiDimensions()),
883                 IllegalArgumentException.class, "Dividing %s by %s does not result in an instance of type FloatDimensionless",
884                 scalar1.toDisplayString(), scalar2.toDisplayString());
885         return new FloatDimensionless(scalar1.si / scalar2.si, DimensionlessUnit.SI);
886     }
887 
888 }