Tag: math.h

使用标准C数学库实现sinpi()和cospi()

函数sinpi(x)计算sin(πx),函数cospi(x)计算cos(πx),其中与π的乘法隐含在函数内部。 这些函数最初被引入C标准数学库,作为Sun Microsystems在20世纪80年代后期的扩展。 IEEE Std 754™-2008在第9节中规定了等效函数sinPi和cosPi 。 有许多计算,sin(πx)和cos(πx)自然发生。 一个非常简单的例子是Box-Muller变换(GEP Box和Mervin E. Muller,“关于随机正态偏差的一个注记”。 “数学统计年鉴” ,第29卷,第2期,第610-611页) ),给定两个独立的随机变量U 1和U 2均匀分布,产生具有标准正态分布的独立随机变量Z 1和Z 2: Z₁ = √(-2 ln U₁) cos (2 π U₂) Z₂ = √(-2 ln U₁) sin (2 π U₂) 另一个例子是度数参数的正弦和余弦的计算,就像使用Haversine公式计算大圆距离一样: /* This function computes the great-circle distance of two points on earth using the Haversine formula, assuming […]

在C中包含文件

我想创建一个涉及sqrt() , floor()和pow()的简单函数。 所以,我包括 。 当我尝试使用我的函数时,我的程序说sqrt()和floor()不存在。 我已经对我的文件进行了三次检查并重写了它们,但它仍然会出现同样的错误。 只是为了检查目录是否有任何问题,我创建了另一个单独的文件来计算相同的东西并且它有效。 我现在很无能为力。 我究竟做错了什么? 非运作程序的代码: #include #include “sumofsquares.h” int sumofsquares(int x){ int counter = 0; int temp = x; while(temp != 0){ temp = temp – (int)pow(floor(sqrt(temp)), 2); counter ++; } return counter; } 工作测试文件: #include #include int main(void){ printf(“%d”, (int)pow(floor(sqrt(3)), 2)); } 错误就是这个 /tmp/ccm0CMTL.o:函数sumofsquares’:/ home / cc136 / […]

C – 舍入问题(CS50)

我已经谷歌搜索了好几天,我迷路了。 所以在网上做CS50似乎无法掌握这一轮数字。 我的程序搞乱了像2.10这样的浮点数乘以100这样的整数输出209.xxxxxxxx 就像我说我已经阅读了无数的post,我应该使用ceilf并包含 但是我收到了一个错误 greedy.c :(。text + 0x74):未定义引用`ceilf’collect2:错误:ld返回1退出状态make:*** [greedy]错误1 adam @ beethoven:〜/ projects / atom / edx / pSet1 /贪婪$ 我已经看过关于-lm和某个文件的post,但如果我说实话,我不明白这意味着什么。 我绝不是在寻找一个彻底的解决方案,只是在改进方面提供指导。 这是我的代码,可能不像某些人希望的那样精简,但我回到这里的基础;) #include #include int main() { // Initialize Variables int coinsTotal = 0, quarter = 25, dime = 10, nickel = 5, penny = 1, cents; float changeDue; do { printf(“How much […]

C / C ++中sqrt函数的保证精度

每个人都知道C / C ++中math.h / cmath sqrt函数 – 它返回其参数的平方根。 当然,它必须有一些错误,因为不是每个数字都可以精确存储。 但我保证结果有一定的精确度吗? 例如,’它是可以用浮点类型表示的平方根的最佳近似值, or如果计算结果的平方,它将使用给定的浮点类型尽可能接近初始参数? C / C ++标准有什么关于它的吗?

C和C ++标准的数学精度要求

在C和C ++标准中,是否需要在math.h对浮点(即sqrt , exp , log , sin ,…)进行数学运算才能返回数值最佳解? 对于给定的(精确且有效的)输入,通常显然不是这些函数的精确浮点输出。 但输出是否必须是最接近数学上精确值的可表示值? 如果没有,是否有任何关于精度的要求(可能是平台特定的/在其他标准中?),以便我能够在我的代码中对计算错误进行最坏情况估计? 现代实施的数值误差的典型限制是什么?

在编译和链接C代码时,为什么在某些情况下不需要-lm?

我这里有一个示例文件: #include #include int main(){ printf(“%f\n”, log(10)); } 当我用gcc sample.c -oa编译它时它工作得很好。 我可以使用./a运行它,它会产生预期的输出2.302585 。 然而,当我的文件看起来像这样: #include #include int main(){ double a = 10; printf(“%f\n”, log(a)); } 它不能用gcc sample.c -oa编译。 相反,我必须使用gcc sample.c -oa -lm这样我才能显然告诉它“链接数学”…这就是我没有真正遵循的地方,为什么我不必在第一次链接数学例? 它究竟是什么意思必须“链接数学”? 自从我使用C编译器以来已经有一段时间了,所以如果这是一个糟糕的问题,请原谅我。

如何用C计算pow()?

我们的教授说你不能计算一个b,如果a <0使用pow()因为pow()使用自然对数来计算它(a b = e b ln a ),因为它对于负数是未定义的,所以它不能计算。 我尝试了它,只要b是整数就可以工作。 我搜索了math.h和其他文件,但无法找到函数的定义方式以及它用于计算的内容。 我也试过在互联网上搜索,但没有任何成功。 Stack Overflow 在这里和这里有类似的问题(对于C#)。 (最后一个很好,但我找不到源代码。) 所以问题是pow()实际上是如何用C计算的? 当基数是有限的且负数且指数是有限且非整数时,为什么它会返回域错误?

与gcc和-lm链接并没有在Ubuntu上定义ceil()

我目前正在使用gcc进行编译,我需要使用 。 问题是它无法识别库。 我也尝试过-lm而且没有。 我试图使用的函数是ceil() ,我得到以下错误: : undefined reference to `ceil’ collect2: ld returned 1 exit status 我正在使用最新的Ubuntu和math.h。 我尝试在不同的计算机上使用-lm ,它完美地工作。 有谁知道如何解决这个问题? 我确实包含了 。 另外,我使用的命令是: gcc -lm -o fb file.c

sqrt()函数不能使用变量参数

我不知道我是否遗漏了一些明显的东西,但似乎我无法计算C中变量的平方根; sqrt()函数似乎只适用于常量。 这是我的代码: #include #include int main() { double a = 2.0; double b = sqrt(a); printf(“%f”, b); return 0; } 当我运行此程序时,我收到以下错误: gcc -Wall -o “test2” “test2.c” (in directory: /home/eddy/Code/euler) /tmp/ccVfxkNh.o: In function `main’: test2.c:(.text+0x30): undefined reference to `sqrt’ collect2: ld returned 1 exit status Compilation failed. 但是,如果我将sqrt()中的参数替换为常量(例如b = sqrt(2.0) ( b = sqrt(2.0) ),那么它可以正常工作。 […]