问题标签 [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.
math - 用于 C 的定点 (32,32) 格式(64 位)库的 math.h 函数
我正在为我的 C 实现之一寻找一个 64 位定点 (32,32) 库。
类似于这个http://code.google.com/p/libfixmath/
需要对标准 math.h 操作的支持。
有没有人看到这样的实现?
c++ - 使用 cmath 时禁用 math.h 废话
我之前遇到了一个问题,因为没有std::
. 而且诅咒仍然不时发生,因为我不使用using namespace std;
.
删除 using namespace std 会导致程序得到垃圾结果
有没有办法禁用所有来自 c 的非标准函数,并且只能在命名空间下使用 c++ 函数std
(而不必使用using namespace std;
)?
换句话说:如果我使用sin()
而不是,我想得到一个错误,而不是std::sin()
这样我就不会犯那个错误。当然,不仅针对 sin,还针对与math.h
.
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()
函数在我给出的一个代码段中确实有效,但在另一个代码段中无效。
这是失败的程序:
这让我感觉有点愚蠢,或者至少,我觉得这些年来我错过了一些东西。
c - 数学库现在包含在 glibc 中吗?
当我尝试从终端编译这个简单的代码时:
使用
gcc main.c
命令,它被编译并且 a.out 给出正确的答案。这意味着数学函数被添加到自动链接的 C 标准库中。
但是,如果在 Eclipse IDE 中编译相同的代码而不向属性添加任何库,则会给出未定义的引用错误。这意味着数学函数不是 C 标准库的一部分。
真相是什么?
c - 为什么在编译和链接 C 代码时在某些情况下不需要 -lm?
我在这里有一个示例文件:
当我用它编译它时,gcc sample.c -o a
它工作得很好。我可以运行它,./a
它会产生2.302585
预期的输出。
然而,当我的文件看起来像这样时:
它不能用gcc sample.c -o a
. 相反,我必须使用gcc sample.c -o a -lm
它,以便显然可以告诉它“链接数学”......这就是我没有真正遵循的地方,为什么我不必在第一个示例中链接数学?甚至必须“链接数学”到底意味着什么?自从我使用 C 编译器以来已经有一段时间了,如果这是一个糟糕的问题,请原谅我。
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 函数不同。
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)
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 位浮点变量的范围?
c - sqrt 仅在参数为非负数时定义
这编译得很好
如果我将 9.0 更改为 -9.0,那么我的编译器 (GNU C) 会给出关于“sqrt”的未定义引用的错误。
我期待 sqrt 函数返回 NaN 或异常。C 库如何只为非负参数定义 sqrt?
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