C pow和powf的区别是什么

C pow和powf的区别是什么,c,floating-accuracy,C,Floating Accuracy,我试图解决一个数学问题,我的输出灵敏度有点不同,比如0.07。然后在我的代码中比较pow和powf,我看到了这种敏感性。守则如下: int main() { int terms, sign=-1; double x, operation=0.0; printf("Please enter the number of terms : "); scanf_s("%d", &terms); while (terms <= 0) {

我试图解决一个数学问题,我的输出灵敏度有点不同,比如0.07。然后在我的代码中比较pow和powf,我看到了这种敏感性。守则如下:

int main()
{

    int terms, sign=-1;
    double x, operation=0.0;

    printf("Please enter the number of terms : ");
    scanf_s("%d", &terms);

    while (terms <= 0)
    {
        printf("Please re-enter the number of terms :");
        scanf_s("%d", &terms);
    }

    printf("Please enter a value for x :");
    scanf_s("%lf", &x);

    for (int i = 1; i <= terms; i++)
    {
    sign = sign * (-1);
    operation = operation + sign * powf(x + i / 10.0, (2 * i) - 1) / (2 * i);
    }
    printf("The result is : %.2lf\n", operation);

    system("pause");
    return 0;

}
这些功能之间的区别是什么?

pow使用双工。powf在浮子上运行。这是C中相当标准的表示法,其中函数的基名称将用于操作数和默认类型(如int和double)的返回值,而前缀和后缀版本用于其他类型(如long、float等)。这里有一个参考:

数据类型的这种差异充分解释了您在结果中看到的差异

双精度在尾数中包含53位精度,转换为约16位十进制精度。这超出了显示结果的精度,因此可能足够精确

另一方面,浮点在尾数中只有24位,转换为约7位十进制数字。任何操作组合都会导致舍入误差,几乎立即进入显示精度范围。

pow使用双倍运算。powf在浮子上运行。这是C中相当标准的表示法,其中函数的基名称将用于操作数和默认类型(如int和double)的返回值,而前缀和后缀版本用于其他类型(如long、float等)。这里有一个参考:

数据类型的这种差异充分解释了您在结果中看到的差异

双精度在尾数中包含53位精度,转换为约16位十进制精度。这超出了显示结果的精度,因此可能足够精确


另一方面,浮点在尾数中只有24位,转换为约7位十进制数字。任何操作组合都会导致舍入错误,几乎会立即进入显示精度范围。

直到C11,C语言才具有通用函数。相反,对于不同的数据类型,标准库中有不同的函数


的*f函数在内部使用单精度浮点数对单精度浮点数进行运算。double代表。。。双精度。在非泛型函数中始终使用双参数。相反,对于不同的数据类型,标准库中有不同的函数

的*f函数在内部使用单精度浮点数对单精度浮点数进行运算。double代表。。。双精度。始终将非f函数用于双参数。

区别在于:

float powf( float base, float exponent );
double pow( double base, double exponent );
描述

pow函数的计算基数提高到指数的幂

区别在于:

float powf( float base, float exponent );
double pow( double base, double exponent );
描述

pow函数的计算基数提高到指数的幂

如前所述,pow采用双精度,其中powf采用浮点数使其精度大大降低。

如前所述,pow采用双精度,其中powf采用浮点数使其精度大大降低。

powf返回并采用浮点数的参数

pow返回double并接受double的参数。如果一个浮点数作为参数给出,它将通过通常的升级规则转换为double

您在结果中看到的差异是由于double

powf返回和接受浮点参数的精度更高

pow返回double并接受double的参数。如果一个浮点数作为参数给出,它将通过通常的升级规则转换为double


您在结果中看到的差异是由于double的精度更高:double-powdouble x,double-y和float-powfloat x,float-yun相关:请不要使用_-s功能,它们与便携式功能相比没有任何安全性。与其考虑0.07的差异,考虑到1个部分在1000000个方面的差异-关于典型浮点的精度。与1和1F之间相同:双Puxx x,双y和浮点PffLoad x,浮点云相关:请不要使用函数,它们比它们的便携式对应物更安全,而不考虑0.07的差异,考虑一下1分的1000000分——关于典型浮标的精度,和1和1F之间的相同。你引用什么来源?谢谢。这确实是一个必要的改进。这是非常重要的信贷来源,尤其是当你作出这样的直接报价。你引用的来源是什么?谢谢。这确实是一个必要的改进。这是非常重要的信贷来源,特别是当你作出这样的直接报价。