📜  Java中的数学 fma() 方法和示例

📅  最后修改于: 2022-05-13 01:54:26.749000             🧑  作者: Mango

Java中的数学 fma() 方法和示例

在 Math 类中,根据传递给它的参数,有两种类型的 fma() 方法。

方法是:

fma(双a,双b,双c):

Math 类的这个方法用于返回前两个双精度数与第三个双精度数相加的精确乘积,然后将结果四舍五入到最接近的双精度数。使用舍入到最接近的偶数舍入模式完成舍入。设 a, b, c 是三个双精度数,则 a * b + c 被计算为正则浮点表达式,涉及两个舍入误差,第一个用于 a*b 的乘法运算,第二个用于乘积的加法运算结果与 c。

此方法的一些特殊情况是:

  • 如果这三个中的任何参数是 NaN,则结果是 NaN。
  • 如果前两个参数之一是无限的,另一个为零,则结果为 NaN。
  • 如果两个参数的精确乘积是无限的,而第三个参数是相反符号的无穷大,则结果为 NaN。

例子:

Input: a = 2.0, b = 3.0, c = 3.0
Output: 9.0
    As 2.0 * 3.0 + 3.0 = 9.0

Input: a = 9.20, b = 6.30, c = 4.10
Output: 62.059999999999995 
    As 9.20 * 6.30 + 4.10 = 62.059999999999995 

句法:

public static double fma(double a, double b, double c)

参数:此方法接受三个双精度数a、b、c作为参数,其中 a 和 b 是要相乘的参数,c 是要与产品相加的参数。

返回值:此方法在计算a * b + c后返回舍入的 double 值,范围和精度不受限制。

注意:此方法是在JDK 9中添加的。因此它不会在 Online IDE 中运行。

下面的程序说明了 fma() 方法:

方案一:

// Java program to demonstrate the fma() Method.
  
public class GFG {
  
    // Main method
    public static void main(String[] args)
    {
  
        // three double values
        double a = 9.20, b = 6.30, c = 4.10;
  
        // apply fma method
        double d = Math.fma(a, b, c);
  
        // print result
        System.out.println(a + " * " + b
                           + " + " + c
                           + " = " + d);
    }
}

输出:

9.2 * 6.3 + 4.1 = 62.059999999999995

方案二:

// Java program to demonstrate the fma() Method.
  
public class GFG {
  
    // Main method
    public static void main(String[] args)
    {
  
        // three double values
        double a = 19.20, b = 16.30, c = 44.10;
  
        // apply fma method
        double d = Math.fma(a, b, c);
  
        // print result
        System.out.println(a + " * " + b
                           + " + " + c
                           + " = " + d);
    }
}

输出:

19.2 * 16.3 + 44.1 = 357.06

fma(浮动 a,浮动 b,浮动 c):

Math 类的这个方法和 fma(double a, double b, double c) 一样,但不同的是它以 float 作为属性,返回 float 作为返回值。所以我们可以说这个方法返回前两者的精确乘积参数(浮点值)加上第三个参数(浮点值),然后将结果四舍五入到最接近的浮点数。使用舍入到最接近的偶数舍入模式完成舍入。设 a, b, c 是三个浮点数,则 a * b + c 被评估为正则浮点表达式,涉及两个舍入误差,第一个用于 a*b 的乘法运算,第二个用于 a*b 的加法运算与 c 的乘积结果。

示例

Input: a = 29.20f, b = 18.40f, c = 43.10f;
Output: 580.38 
    As 29.20f * 18.40f + 43.10f = 580.38

Input: a = 9.20f, b = 6.30f, c = 4.10f;
Output: 62.059999999999995f 
    As 9.20f * 6.30f + 4.10f = 62.059999999999995f

句法:

public static double fma(float a, float b, float c)

参数:此方法接受三个浮点数a、b、c作为参数,其中 a 和 b 是我们要相乘的参数,c 是我们要与产品相加的参数。

返回值:此方法在计算a * b + c后返回四舍五入的浮点值,范围和精度不受限制。

注意:此方法是在JDK 9中添加的。因此它不会在 Online IDE 中运行。

下面的程序说明了 fma() 方法:

方案一:

// Java program to demonstrate
// the fma() Method.
  
public class GFG {
  
    // Main method
    public static void main(String[] args)
    {
  
        // three double values
        float a = 29.20f, b = 18.40f, c = 43.10f;
  
        // apply fma method
        float d = Math.fma(a, b, c);
  
        // print result
        System.out.println(a + " * " + b
                           + " + " + c
                           + " = " + d);
    }
}

输出:

29.2 * 18.4 + 43.1 = 580.38

方案二:

// Java program to demonstrate
// the fma() Method.
  
public class GFG {
  
    // Main method
    public static void main(String[] args)
    {
  
        // three double values
        float a = 49.29f, b = 28.58f, c = 33.63f;
  
        // apply fma method
        float d = Math.fma(a, b, c);
  
        // print result
        System.out.println(a + " * " + b
                           + " + " + c
                           + " = " + d);
    }
}

输出:

49.29 * 28.58 + 33.63 = 1442.3383

参考文献:https: Java/lang/Math.html#fma(double, double, double), https://docs.oracle.com/javase/10 /docs/api/ Java/lang/Math.html#fma(float, float, float)