Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何将双倍值提高12的幂?_C_Objective C_Math - Fatal编程技术网

C 如何将双倍值提高12的幂?

C 如何将双倍值提高12的幂?,c,objective-c,math,C,Objective C,Math,我有一张双人床,是: double mydouble = 10; 我想要10^12,所以10*10*10*10*10*10*10*10*10*10*10*10*10。我试过了 double newDouble = pow(10, 12); 它在NSLog中返回我:pow=-1.991886 没有多大意义。。。我认为pow不是我的朋友,对吗?试试pow(10.0,12.0)。更好的是,#包括math.h 澄清一下:如果不包含,编译器将假定pow()返回一个整数。包括math.h带来了一个原型,

我有一张双人床,是:

double mydouble = 10;
我想要10^12,所以10*10*10*10*10*10*10*10*10*10*10*10*10。我试过了

double newDouble = pow(10, 12);
它在NSLog中返回我:
pow=-1.991886

没有多大意义。。。我认为pow不是我的朋友,对吗?

试试pow(10.0,12.0)。更好的是,
#包括math.h

澄清一下:如果不包含,编译器将假定
pow()
返回一个整数。包括math.h带来了一个原型,比如

double pow(double, double);

因此编译器可以理解如何处理参数和返回值。

这是pow的正确语法,您要将什么格式的字符串传递给NSLog(…)?

您是否尝试转换为双精度:

NSLog(@"(double)pow(10, 12)                    = %lf", (double)pow(10, 12));

我甚至无法在没有以下条件的情况下编译程序:

#include <math.h>
#包括

当使用这样的数学函数时,您应该始终包含math.h,并确保您调用的是正确的pow函数。谁知道另一个pow函数可能是什么。。。它可以代表“动力轮”哈哈

以下是如何用最少的乘法计算x^12

y = x*x*x; y *= y; y *= y;

该方法来自Knuth的第4.6.3节。

pow
已经返回了一个double,因此该cast可能会被编译器忽略。该cast不会执行您期望的操作。需要包括math.h.这背后的原因是什么?是否有另一个用Obj-C定义的
pow
执行完全无关的操作?事实上,这会让我觉得难以置信的愚蠢。原因是如果不包括,pow()根本就没有被声明。这在C语言中是合法的(不是在C++中),编译器假定pow()接受int参数并返回int,并相应地生成其代码。大多数人打开适当的编译器选项来警告或错误未声明的函数。这与Cocoa或Objective-C无关。事实上,目标C比C++更接近C(C++ C++标签实际上直接干扰了问题)。请将生成此结果的代码(包括NSLoG语句)张贴。实际上,而不是,正如他问的关于C++的。@克里斯:他问的是ObjuleC,而不是C++。Neeraj:
-lm
在Apple编译器工具中是隐式的。昨天,它说C++,今天Objto-C和C叹息。注意,虽然这将比 PoW(x,12)更快,但在具有高质量数学库的平台上也会不太准确。这可能重要,也可能不重要,这取决于结果的使用方式。我怀疑它是否会不那么准确。对于10.0的特定值,重复乘法法至少会同样准确。然而,
pow(x,12.0)
的良好库实现将为
x
的所有双精度值提供小于1 ulp的错误结果,而重复乘法可能会产生更大的错误(2或3 ulp相当常见)。今天常用的编译器中是否提供了标准库“好”还是“高质量”?“乘法应该在半个ulp以内,对吧,这里有四个乘法。我相信,好的库确实会在1ULP内获得pow,但是有很多不好的库,其中一些库会将pow转移到exp。所以这当然取决于库。我相信一个图书馆在乘法运算上比在pow上搞砸的要少。我觉得很奇怪,OP给了我们小整数作为输入。不确定这对他来说是否普遍。当然,英特尔和苹果的库(我熟悉的两个)提供的结果比1 ulp更准确。我不知道glibc和MS库中的数字是什么状态,但我相信HP和Sun都能提供亚ulp的准确答案。