Tag: math

为什么 – GCC中的-freciprocal-math不安全?

GCC中的-freciprocal-math更改以下代码 double a = b / c; 至 double tmp = 1/c; double a = b * tmp; 在GCC手册中,据说这种优化是不安全的,并且不符合IEEE标准。 但我想不出一个例子。 你能举个例子吗?

如何将网格规范化为-1到1,然后从规范化网格恢复为原始网格?

我有一个X,Y,Z格式的网格模型。 让我们说。 Points *P; 在第一步中,我想将此网格规范化为(-1,-1,-1)到(1,1,1)。 这里标准化意味着将此网格拟合到(-1,-1,-1)到(1,1,1)的框中。 然后我对标准化网格进行一些处理,最后我想将尺寸恢复为与原始网格相似。 步骤1: P =原始网格尺寸; 步骤2: nP =归一化(P); //从(-1,-1,-1)到(1,1,1) 步骤3: cnP =用(nP)做某事,顶点数增加或减少。 步骤4:原始网格尺寸=恢复(cnP); //尺寸应与原始网格相同 我怎样才能做到这一点?

如何计算圆周上点的(x或y)坐标?

px和py是圆周上点的x和y坐标。 鉴于: the center of the circle as: cx, cy the radius of the circle as: r px 如何计算py的值? 谢谢!

需要澄清BODMAS规则

在BODMAS规则中,操作的顺序是括号,顺序,除法,乘法加法和减法。除法,乘法,加法和减法遵循递减,递增,递增和递减顺序.BODMAS规则系列不遵循相同的顺序。并且我的问题是为什么加法后面是减法,而不是减法后加法。

获取数字的第一个小数位

我有一个例如: 2.4444444 。 我需要在点后得到第一个数字 – 在我的情况下它是4 。 怎么实现呢?

如何显示浮点值的编码

我们如何在C中打印浮点值的编码? 我知道我可以使用%A ,但这不是我想要的格式。 例如,如果我的值是1.3416407,我想打印“0x3FABBAE2”,我不是“0X1.5775C4P + 0”。

生成毕达哥拉斯三元组的最佳方法是什么?

当你只检查a和b的所有组合然后检查c的平方根是否为整数,但是那个代码真的很慢,然后我尝试使用Euclid的公式时,我尝试了这个简单的代码 a = d*(n^2 – m^2) b = 2*n*m*d c = d*(n^2 + m^2) 我写了一个代码,你首先找到n trunc(sqrt(max_value)) //this is in pascal 然后你检查0 <m <n的每个组合,但我得到重复的结果,如果n是7,m是5,d是1,n是6,m是1,d是2。 在这两种情况下,你得到24,70和74.那么什么是计算毕达哥拉斯三元组数量的快速方法,我似乎无法找到方法,如果我将所有结果添加到数组,然后检查重复的数组,它只需要太多的时间…如果有人可以帮助我的代码,它可以是pascal,c或python,我可以理解所有…

带负数的Mod在Java和C中给出否定结果

假设我有(-5) mod 8 。 我用Java和C两种语言尝试过,当我期待3时,他们给了我-5结果。 为什么会这样? 模数可以为负数吗? 我应该改变什么来获得正确的结果? Java代码 public class Example { public static void main(String[] args) { int x; x = -5%8; System.out.println(x); } } C代码 int main(){ int x; x = -5%8; printf(“%d”, x); } 产出

快速找到下一个数字的倍数

我需要找到从基数开始的数字的第一个倍数。 例如:7的3的第一个倍数是9.我的第一次尝试是这样做: multiple = baseNumber while(multiple%number !=0 ) multiple++ 最后,“multiple”将具有baseNumber之后的第一个number baseNumber 。 问题是当number变得太大时,迭代次数变得太多。 所以我的问题是:有更快的方法吗?

精确计算缩放互补误差函数,erfcx()

通常由erfcx指定的(指数)缩放互补误差函数在数学上定义为erfcx(x):= e x 2 erfc(x)。 它经常发生在物理学和化学中的扩散问题中。 虽然一些数学环境(如MATLAB和GNU Octave )提供此function,但它不存在于C标准数学库中,它只提供erf()和erfc() 。 虽然可以直接在数学定义上实现自己的erfcx() ,但这仅适用于有限的输入域,因为在正半平面erfc()下溢中等幅度的参数,而exp()溢出,例如,正如这个问题所述 。 为了与C一起使用,可以调整一些erfcx()开源实现,例如Faadeeva包中的实现 ,正如对这个问题的回答所指出的那样。 但是,这些实现通常不能为给定的浮点格式提供完全准确性。 例如,使用2 32个测试向量的测试显示由Faadeeva包提供的erfcx()的最大误差在正半平面中为8.41ulps,在负半平面中为511.68ulps。 准确实现的合理界限是4 ulps,对应于英特尔矢量数学库的LA配置文件中数学函数的精度界限,我发现这对于需要两者的非平凡数学函数实现是一个合理的界限。准确性好,性能好。 如何只使用C标准数学库,并且不需要外部库, erfcxf() erfcx()和相应的单精度版本erfcxf()如何准确实现? 我们可以假设C的float nad double类型映射到IEEE 754-2008 binary32和binary64浮点类型。 可以假设硬件支持融合乘法 – 加法运算(FMA),因为此时所有主要处理器架构都支持此function。