Tag: 浮点精度

数字622.08E6 C中的解释

我最近发现了一个C代码(顺便说一句) freq_xtal = ((622.08E6 * vcxo_reg_val->hiv * vcxo_reg_val->n1)/(temp_rfreq)); 从我的直觉来看,似乎622.08E6应该意味着622.08 x 10^6这个假设是否正确? 我尝试使用谷歌搜索一个类似的例子,其中E符号在C程序中使用。令人惊讶的是找不到任何结果

Newton Raphson迭代陷入无限循环

我是这个主题的初学者,并且找不到原因:有时程序有效,有时候没有(在提出问题之后,它根本不想接受我的答案,而不是我可以写作我想要它,它没有回应,只列出数字,我插入) #include float abszolut (float szam) { float abszoluterteke; if (szam >=0) abszoluterteke = szam; else abszoluterteke = -szam; return abszoluterteke; } float negyzetgyok (float szam) { float pontossag = 0.000001; float tipp = 1; if (szam = pontossag) tipp = (szam/tipp + tipp)/2; return tipp; } } int main (void) { float alap, eredmeny; […]

双打遭遇溢出吗?

是否可以使用double或float进行溢出(环绕)? 如果在x86或x64硬件上达到最大(或最小)值,会发生什么?

为什么1.2 * 30 = 35?

为什么这样: int main(void) { short w = 30; return 1.2 * w; } 回35?

将IEEE 754 Float转换为MIL-STD-1750A Float

我试图将IEEE 754 32位单精度浮点值(标准c浮点变量)转换为MIL-STD-1750A格式的无符号长变量。 我在post的底部包含了IEEE 754和MIL-STD-1750A的规范。 现在,我在代码转换指数时遇到问题。 我也看到了转换尾数的问题,但我还没有解决这些问题。 我使用上面链接中表3中列出的示例来确认我的程序是否正确转换。 其中一些例子对我没有意义。 这两个例子如何具有相同的指数? .5 x 2^0 (0100 0000 0000 0000 0000 0000 0000 0000) -1 x 2^0 (1000 0000 0000 0000 0000 0000 0000 0000) .5 x 2 ^ 0有一个小数位,-1没有小数位,所以.5 x 2 ^ 0的值应该是 .5 x 2^0 (0100 0000 0000 0000 0000 0000 0000 0010) 对? (而不是0001,因为1750A使用加1偏差) 最后一个例子如何使用所有32位,第一个位为1,表示负值? […]

为什么我不能乘以浮动?

可能重复: 处理浮点数中的精度问题 我很惊讶为什么我试图将C中的浮点数(与GCC 3.2)相乘并且它没有按照我的预期进行。作为示例: int main() { float nb = 3.11f; nb *= 10; printf(“%f\n”, nb); } 显示:31.099998 我对浮动的实现方式及其产生这种意外行为的原因感到好奇吗?

C / C ++中的80位浮点运算

假设a, b是_int64变量。 需要在高精度80位浮点中计算sqrt((long double)a)*sqrt((long double)b) 。 例。 (__int64)(sqrt((long double)a)*sqrt((long double)a) + 0.5) != a在很多情况下应该是。 哪个win32 C / C ++编译器可以管理80位浮点运算?

打印__float128,不使用quadmath_snprintf

在我关于32位十进制数的浮点/双精度分析的问题中,一个答案说要看一下__float128 。 我使用它,编译器可以找到它,但我无法打印它,因为编译器找不到标题quadmath.h 。 所以我的问题是: __float128是标准的,对吗? 怎么打印? 是不是quadmath.h标准? 这些答案没有帮助: 使用extern C C ++精度 印花 裁判也没有帮助。 请注意,我不想使用任何非标准库。 [编辑] 如果这个问题有答案,即使答案是否定的,也会有用。

sizeof long double和precision不匹配?

考虑以下C代码: #include int main(int argc, char* argv[]) { const long double ld = 0.12345678901234567890123456789012345L; printf(“%lu %.36Lf\n”, sizeof(ld), ld); return 0; } 在Ubuntu x64 13.04下用gcc 4.8.1编译,它打印: 16 0.123456789012345678901321800735590983 这告诉我一个长双倍权重16字节,但小数似乎只对第20位。 这怎么可能? 16个字节对应四元组,四元组给出33到36个小数。

精确计算缩放互补误差函数,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。