Tag: 数学

嵌入式系统上的三角函数

sin和cos函数很慢,需要大量资源才能在嵌入式系统上运行。 如何以更节省资源和更快速的方式计算sin和cos函数?

为什么pow(-infinity,正非整数)+无限?

C99附件F(IEEE浮点支持)说: 对于y> 0而言, pow(−∞, y)返回+∞而不是奇数。 但是,比方说,( – ∞) 0.5实际上有虚数值±∞i,而不是+∞。 C99自己的sqrt(−∞)返回NaN并按预期生成域错误。 那么为什么需要返回+∞? (大多数其他语言直接使用C库,或者像本例中的Python一样,通过标准复制它所需的行为,因此在实践中这不仅仅影响C99。)

在不使用modf()的情况下获取float的小数部分

我正在为没有数学库的平台开发,所以我需要构建自己的工具。 我目前得到分数的方法是将浮点数转换为固定点(乘以(浮点)0xFFFF,转换为int),只得到下部(掩码为0xFFFF)并再次将其转换回浮点数。 然而,不精确是杀了我。 我正在使用我的Frac()和InvFrac()函数来绘制抗锯齿线。 使用modf我得到一个非常流畅的线条。 使用我自己的方法,由于精度损失,像素开始跳跃。 这是我的代码: const float fp_amount = (float)(0xFFFF); const float fp_amount_inv = 1.f / fp_amount; inline float Frac(float a_X) { return ((int)(a_X * fp_amount) & 0xFFFF) * fp_amount_inv; } inline float Frac(float a_X) { return (0xFFFF – (int)(a_X * fp_amount) & 0xFFFF) * fp_amount_inv; } 提前致谢!

Langford序列实现Haskell或C.

在组合数学中, Langford配对 ,也称为Langford序列,是2n数字2n 1, 1, 2, 2, …, n, n序列的排列,其中两个数字相隔一个单位,两个两个相距两个单位,更一般地,每个数字k的两个副本相隔k个单位。 例如: n = 3 Langford配对由序列2,3,1,2,1,3. 在haskell或C解决这个问题的好方法是什么 你能建议一个算法来解决它(不想使用蛮力)? – – – – – – – – – – – – – 编辑 – – – – – – – – – – – 我们如何定义数学规则以将@ Rafe的代码放入haskell中

纯C中的符号计算库

是否存在编写纯C的符号计算库? 符号计算在象征forms的数学方程中的运用。 我知道有Mathematica和Sympy 。 但是,我有兴趣在一个符号计算库的高性能纯C实现中创建绑定到脚本语言,特别是Ruby启动。 似乎他们需要这样一个象征性的数学图书馆。 随着时间的推移,理想情况下,库可以构建为类似于libgit2的庄园,其中有一个项目的中央C实现,并且各种实现分支以创建与其他语言的绑定?

给定角度和长度,如何计算坐标

假设左上角是(0,0)并且我给出了30度的角度,起点为(0,300),线长度为600,我该如何计算线的终点以便该线代表给定的角度。 C伪代码是 main() { int x,y; getEndPoint(30, 600, 0, 300, &x, &y); printf(“end x=%d, end y=%d”, x, y); } // input angle can be from 0 – 90 degrees void getEndPoint(int angle, int len, int start_x, int start_y, int *end_x, int *end_y) { calculate the endpoint here for angle and length *end_x = calculated_end_x; *end_y […]

如何将64位哈希值缩短到48位值?

我已经在库中有64位散列函数(C编码),但我只需要48位。 我需要将64位散列值减少到48位值,但它必须以安全的方式才能最小化冲突。 散列函数是一个非常好的64位散列函数。 它已经通过SMHasher(“DieHarder”哈希测试)进行了测试,并且certificate比Murmur2更好。 据我的同事们说,在lib中实现64位散列的算法是xxHash,用SMHasher测试并得到Q.Score为10! 对于那些想要查看它的人,xxHash的源代码可以在github.com上找到: github.com/Cyan4973/xxHash/releases/latest 。 基本思想是使64位散列值(或其中一部分)中的所有位对产生的48位散列值产生影响。 有没有办法做到这一点? [编辑后期]: 所以我实现了自己的48位(准)-UUID生成器。 请在此处查看完整的工作解决方案(包括源代码): https : //stackoverflow.com/a/47895889/4731718 。

用于数学矩阵运算的C库

我知道对于所有类型的矩阵分解(QR分解,SVD,……),乘法等都有一些优化的算法。 然而,我找不到一个好的概述。 对于C ++, 这个问题中有一些有用的信息,但我在C中寻找那些东西。

基于小型c的矢量和矩阵库的建议

我需要一个轻量级的库,用于2D和3d矢量以及3×3和4×4矩阵。 在基本的C.这样我就不会重新发明轮子次优。 有什么建议?

从头开始的WAV文件合成 – C.

最近我在CS 101课堂上看到了一个video讲座,它启发我开始使用C语言中的WAV文件格式。我今天的项目一直是使用简单的数学正弦函数创建声音。 尽管有几个障碍,我的程序现在可以接受几个输入(波的频率,波的幅度,采样率等)并创建包含指定音高的wav文件。 但是,在我的电脑扬声器上播放这些音调时,会发出一种奇怪的,有节奏的砰砰声,这种声音会随着采样率的变化而变化。 在较高的采样率下,弹出声音的频率增加并变成恼人的呜呜声。 奇怪的是,弹出的声音在具有相同文件的不同计算机上是一致的。 下面我将发布用于生成WAV文件的代码。 任何可能导致这种现象的见解都将受到赞赏。 这可能只是我某处的一个愚蠢的错误。 🙂 #include #include #include #include #include #include struct WAVHeader { char ChunkID[4]; uint32_t ChunkSize; char RIFFType[4]; }; struct FormatHeader { char ChunkID[4]; uint32_t ChunkSize; uint16_t CompressionCode; uint16_t Channels; uint32_t SampleRate; uint32_t AvgBytesPerSec; uint16_t BlockAlign; uint16_t SigBitsPerSamp; }; struct DataHeader { char ChunkID[4]; uint32_t ChunkSize; }; void […]