问题标签 [math.h]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1448 浏览

math - 用于 C 的定点 (32,32) 格式(64 位)库的 math.h 函数

我正在为我的 C 实现之一寻找一个 64 位定点 (32,32) 库。

类似于这个http://code.google.com/p/libfixmath/

需要对标准 math.h 操作的支持。

有没有人看到这样的实现?

0 投票
2 回答
811 浏览

c++ - 使用 cmath 时禁用 math.h 废话

我之前遇到了一个问题,因为没有std::. 而且诅咒仍然不时发生,因为我不使用using namespace std;.

删除 using namespace std 会导致程序得到垃圾结果

有没有办法禁用所有来自 c 的非标准函数,并且只能在命名空间下使用 c++ 函数std(而不必使用using namespace std;)?

换句话说:如果我使用sin()而不是,我想得到一个错误,而不是std::sin()这样我就不会犯那个错误。当然,不仅针对 sin,还针对与math.h.

0 投票
2 回答
2789 浏览

c - 在 C 中使用 sin() 的 math.h 链接器错误

我有两段代码,除了一行之外都相同。一个程序编译失败,另一个程序编译成功。当我执行 cc 编译代码时,我确实链接了数学库。

我正在使用该double sin(double)功能。它显然是在 math.h 中定义的,尽管我查看了 /usr/include/math.h 并没有发现对该sin()函数的引用。

http://www.gnu.org/software/libc/manual/html_mono/libc.html#Trig-Functions

sin()函数在我给出的一个代码段中确实有效,但在另一个代码段中无效。

这是失败的程序:

这让我感觉有点愚蠢,或者至少,我觉得这些年来我错过了一些东西。

0 投票
2 回答
949 浏览

c - 数学库现在包含在 glibc 中吗?

当我尝试从终端编译这个简单的代码时:

使用

gcc main.c

命令,它被编译并且 a.out 给出正确的答案。这意味着数学函数被添加到自动链接的 C 标准库中。

但是,如果在 Eclipse IDE 中编译相同的代码而不向属性添加任何库,则会给出未定义的引用错误。这意味着数学函数不是 C 标准库的一部分。

真相是什么?

0 投票
3 回答
477 浏览

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

我在这里有一个示例文件:

当我用它编译它时,gcc sample.c -o a它工作得很好。我可以运行它,./a它会产生2.302585预期的输出。

然而,当我的文件看起来像这样时:

它不能用gcc sample.c -o a. 相反,我必须使用gcc sample.c -o a -lm它,以便显然可以告诉它“链接数学”......这就是我没有真正遵循的地方,为什么我不必在第一个示例中链接数学?甚至必须“链接数学”到底意味着什么?自从我使用 C 编译器以来已经有一段时间了,如果这是一个糟糕的问题,请原谅我。

0 投票
1 回答
868 浏览

java - 微软和Java / Linux之间的正弦函数结果不同

我有一个为 Windows (Visual Studio) 编写的 C++ 代码,我需要将其移植到 Java 中。这不是很容易,目前我被困在 . Linux(经过测试可以进行比较)和 Java 给出的结果与 Windows 源的结果不同。两个结果都是错误的,但这并不重要。重要的是结果完全相同。

我将在底部发布整个源代码。例如我需要计算 5174852443848405000.0 的正弦值。我知道这是一个非常大而且可能不寻常的数字,但我无法改变这一点。Linux 和 Java 返回 0.153662,Windows 返回大约 0.16xx。函数“random_value_genrator()”被使用了大约 500,000 次,因此结果的差异可能会在稍后的某个时间出现。

initial_value_generator 将计算一个稍后由 random_value_generator 函数使用的值。该值由一个 FILETIME 对象和三个常量生成。缓冲区溢出发生但未处理。random_value_generator 每次使用时都会修改 DWORD64 prng_initial_value。

我能够成功构建 initial_value_generator 函数。

我想我无法完成这项任务,但感谢任何帮助。

一些全局变量:

该功能在程序启动时使用一次。将一个大的 DWORD64 写入 prng_initial_value,稍后由 random_value_generator() 使用。系统时间乘以常数 1(缓冲区溢出),除以常数 2,再加上常数 3。

此函数在每次使用时更改 DWORD64 prng_initial_value。

一些进一步的计算变得疯狂:

作为参考,我发布了我的 Java 代码(所有评论都是英文的)。随机函数看起来有点疯狂,因为我正在测试很多东西。我对此感到非常抱歉。但重要的一点是使用 Math.sin(double x) 函数,其结果与使用 Microsoft C++ 编译器的 Math.h 中的 sin 函数不同。

0 投票
2 回答
920 浏览

c++ - Compilation Error: "pointer can only be subtracted from another pointer"

Just learning C++, and I'm enjoying making my first program it's not much, it just solves math problems I'm having some issues with the distance formula as far as I know my logic is right sqrt((x2-x1)+(y2-y1)). However I am getting the error

error C2113: '-' : pointer can only be subtracted from another pointer which is throwing me off.

BONUS question... if anybody could point me to a method of directing users back to the first menu when they have finished with a previous selection that would be cool. I'm assuming some sort of loops but I haven't covered that yet in my C++ class.

Here is the code(sorry if it is messy but I haven't learned proper formatting yet)

0 投票
1 回答
1240 浏览

c++ - 使用 C/C++ nextafter/nexttoward 函数获取下一个 32 位浮点值失败

使用 C 或 C++,我想在循环中递增所有可表示的 32 位浮点数的范围,类似于您可能递增由 32 位整数表示的所有不同值的方式。

类似于: for(float f = FLOAT_MIN; f < MAX; f = Next_Float(f)) {...}

我认为我可以使用标准数学库中的“nexttoward”或“nextafter”函数来完成该任务。见http://www.cplusplus.com/reference/cmath/nextafter/

现在,当我在 Ubuntu 13.04 上使用双精度或长双精度测试“nexttoward”或“nextafter”函数并使用 g++ 4.7 进行编译时,我没有遇到任何问题。见测试代码:

程序的浮点输出值按预期稳步增加:

ubuntu@ubuntu:~$ g++ -o temp ~/temp.cpp

ubuntu@ubuntu:~$ ./temp

0.10000000000000001942890293094023945741355419158935546875 0.100000000000000033306690738754696212708950042724609375 0.100000000000000033306690738754696212708950042724609375 0.10000000000000004718447854656915296800434589385986328125 0.10000000000000004718447854656915296800434589385986328125 0.1000000000000000610622663543836097232997417449951171875 0.1000000000000000610622663543836097232997417449951171875 0.10000000000000007494005416219806647859513759613037109375 0.10000000000000007494005416219806647859513759613037109375 0.100000000000000088817841970012523233890533447265625

ubuntu@ubuntu:~$

但是当我尝试使用浮点数而不是双精度数时,“nexttoward”和“nextafter”函数让我失望了——这些函数似乎返回的值比 32 位浮点数精度更高,当我将返回值分配给我的 32 位浮点数时,浮动保留其原始值,而不是上升到下一个更高的值。查看示例代码和输出:

请注意,“nexttoward”的第二个输出值具有更高的精度,并且 f 保持相同的值:

ubuntu@ubuntu:~$ g++ -o temp ~/temp.cpp

ubuntu@ubuntu:~$ ./temp

0.100000001490116119384765625 0.10000000149011613326255343281445675529539585113525390625 0.100000001490116119384765625 0.10000000149011613326255343281445675529539585113525390625 0.100000001490116119384765625 0.10000000149011613326255343281445675529539585113525390625 0.100000001490116119384765625 0.10000000149011613326255343281445675529539585113525390625 0.100000001490116119384765625 0.10000000149011613326255343281445675529539585113525390625 0.100000001490116119384765625 0.10000000149011613326255343281445675529539585113525390625 0.100000001490116119384765625 0.10000000149011613326255343281445675529539585113525390625 0.100000001490116119384765625 0.10000000149011613326255343281445675529539585113525390625 0.100000001490116119384765625 0.10000000149011613326255343281445675529539585113525390625 0.100000001490116119384765625 0.10000000149011613326255343281445675529539585113525390625

我想增加所有 32 位浮点值,而不是所有 64 位双精度值 - 增加所有双精度值的时间会太长。

如何解决此问题并实现一种高效、方便且可移植的方式来迭代 32 位浮点变量的范围?

0 投票
4 回答
3848 浏览

c - sqrt 仅在参数为非负数时定义

这编译得很好

如果我将 9.0 更改为 -9.0,那么我的编译器 (GNU C) 会给出关于“sqrt”的未定义引用的错误。

我期待 sqrt 函数返回 NaN 或异常。C 库如何只为非负参数定义 sqrt?

0 投票
1 回答
402 浏览

c - 包含 math.h 和链接 libm 时的 C sinhl 未定义引用

希望有人以前见过这个并且可以提供一些见解。

我包括 math.h 和链接 libm,在 FreeBSD 9.2 x86_64 上使用 gcc 4.2.1。

sinl、cosl、tanl 之类的函数可以工作,但是一旦我调用 sinhl 之类的函数,我就会收到有关内置的​​隐式声明和未定义引用的错误的警告。

相关标题部分:

生成文件的东西:

编译尝试导致:

我检查了 math.h 并且 sinl 和 sinhl 都以相同的方式列出。只是为了笑,我尝试链接到 32 位版本的 libm,这让我无处可去。

有趣的是,如果我查看 /usr/include/libm.a 中的符号,我会看到有关 sinl 的内容,但没有看到有关 sinhl 的内容。我是否需要链接其他库才能使用双曲三角函数?

在过去的 24 小时里,我一直在不停地研究这个问题,但没有看到任何明显的东西。我在很多其他函数上也遇到了同样的问题:coshl、tanhl、logl、log2l、log10l、expl。

有什么想法来自全新的眼光吗?

先感谢您。-T