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.0)
的良好库实现将为x
的所有双精度值提供小于1 ulp的错误结果,而重复乘法可能会产生更大的错误(2或3 ulp相当常见)。今天常用的编译器中是否提供了标准库“好”还是“高质量”?“乘法应该在半个ulp以内,对吧,这里有四个乘法。我相信,好的库确实会在1ULP内获得pow,但是有很多不好的库,其中一些库会将pow转移到exp。所以这当然取决于库。我相信一个图书馆在乘法运算上比在pow上搞砸的要少。我觉得很奇怪,OP给了我们小整数作为输入。不确定这对他来说是否普遍。当然,英特尔和苹果的库(我熟悉的两个)提供的结果比1 ulp更准确。我不知道glibc和MS库中的数字是什么状态,但我相信HP和Sun都能提供亚ulp的准确答案。