Why is FLT

The IEEE 754 standard defines the minimum and maximum values that can be represented in the exponent field, using the biased representation. For binary32, emax is defined as 127 and emin is defined to be 1-emax for all binary representations, that is, -126. The C standard (I'm using the C99 revision here), however, defines FLT_MIN_EXP as: minimum negative integer such that FLT_RADIX rais

为什么是FLT

IEEE 754标准定义了可以在指数字段中使用偏置表示法表示的最小值和最大值。 对于binary32,emax定义为127,emin定义为所有二进制表示的1-emax,即-126。 C标准(我在这里使用C99修订版),但是,将FLT_MIN_EXP定义为: 最小负整数,使得FLT_RADIX上升到小于该功率的一个是归一化浮点数e_min。 这里的重要词汇是“少于一个”。 所以如果float是一个binary32,这意味着FLT_MIN_EXP是-125。 为什么这样定义? 或者换句话说

Most accurate way to compute asinhf() from log1pf()?

The inverse hyperbolic function asinh() is closely related to the natural logarithm. I am trying to determine the most accurate way to compute asinh() from the C99 standard math function log1p() . For ease of experimentation, I am limiting myself to IEEE-754 single-precision computation right now, that is I am looking at asinhf() and log1pf() . I intend to re-use the exact same algorithm for d

从log1pf()计算asinhf()最准确的方法是什么?

反双曲函数asinh()与自然对数密切相关。 我试图确定从C99标准数学函数log1p()计算asinh()的最准确方法。 为了便于实验,我现在将自己限制在IEEE-754单精度计算中,那就是我正在查看asinhf()和log1pf() 。 我打算在后面重复使用完全相同的算法进行双精度计算,即asinh()和log1p() 。 我的主要目标是最大限度地减少ulp错误,次要目标是最大限度地减少错误舍入结果的数量,因为改进的代码至多会比下面发布的版本慢得多。 任何

When is it more efficient to use CORDIC or a polynomial approximation?

I am working on an architecture which does not feature floating point hardware, but only a 16 bit ALU and a 40 bit MAC. I have already implemented 32-bit single precision floating point addition/subtraction, multiplication, cosine, sine, division, square root, and range reduction all in software on this architecture. To implement cosine and sine I first used range reduction using the method d

什么时候使用CORDIC或多项式近似更有效?

我正在研究一种不具有浮点硬件功能的架构,但只有一个16位ALU和一个40位MAC。 在这个架构中,我已经在软件中实现了32位单精度浮点加/减,乘法,余弦,正弦,除法,平方根和范围缩减。 为了实现余弦和正弦,我首先使用KC NG I的文章“ARGUMENT REDUCTION FOR HUGE ARGUMENTS”中描述的方法使用范围缩减,然后实现余弦和正弦函数,它们是范围-pi上的余弦函数和正弦函数的多项式近似值/ 4到+π/ 4。 我参考了哈特等人撰写的“计算

point math consistent in C#? Can it be?

No, this is not another "Why is (1/3.0)*3 != 1" question. I've been reading about floating-points a lot lately; specifically, how the same calculation might give different results on different architectures or optimization settings. This is a problem for video games which store replays, or are peer-to-peer networked (as opposed to server-client), which rely on all clients gener

点数学在C#中一致? 是真的吗?

不,这不是另一个“为什么是(1 / 3.0)* 3!= 1”的问题。 最近我一直在阅读关于浮点数的问题; 具体而言, 相同的计算如何在不同的体系结构或优化设置上给出不同的结果 。 这对存储重播的视频游戏来说是个问题,或者是点对点联网(而不是服务器 - 客户端),这依赖于所有客户端在每次运行程序时都会产生完全相同的结果 - 一个小小的差异浮点计算会导致不同机器上的游戏状态(甚至是在同一台机器上)完全不同! 即使在“遵循

what is it called when a floating point number is larger than its precision?

In single point precision there is a significand of 23 bits giving an integer range (if we where only storing a discreet integer value) up to 2^24. The exponent is 8 bits giving a range up to 2^127. At large magnitude numbers there is a point where they start to lose significant digits from the significand/mantissa. This means a number like (2^32 + 2^8): 4,294,967,552 0x100000100 0b1000

浮点数大于精度时称为什么?

在单点精度中,有23位的有效位给出一个整数范围(如果我们只存储离散的整数值)高达2 ^ 24。 指数为8位,范围可达2 ^ 127。 在大数量级有一个点,他们开始失去有效位数/尾数的有效数字。 这意味着像(2 ^ 32 + 2 ^ 8)这样的数字: 4294967552 0x100000100 0b100000000000000000000000100000000 将被简单地存储为: 指数0b00100000 有效位数/尾数0b00000000000000000000000(1位实施位) 并从精度上失去256。

SecureString password stored in database

This question already has an answer here: Hashing a SecureString in .NET 4 answers SecureString is represented as a byte[] you could encode the bytes eg with bitconverter and save the result. Furthermore SecureString is a encryption not a hash as it can be decrypted. (see below) SecureString mainly meant to store sensitive data in memory . If you have a service / website, this is not as

存储在数据库中的SecureString密码

这个问题在这里已经有了答案: 在.NET 4中散列SecureString的答案 SecureString被表示为一个字节[],您可以使用bitconverter对字节进行编码并保存结果。 此外,由于SecureString可以解密,所以它不是散列。 (见下文) SecureString主要意味着将敏感数据存储在内存中 。 如果你有一个服务/网站,这不像存储在数据库中的值那么重要。 这些不应该是明文,而不是海事组织在你或任何管理员解密而且我不知道阉另一台服务器

C code loop performance [continued]

This question continues on my question here (on the advice of Mystical): C code loop performance Continuing on my question, when i use packed instructions instead of scalar instructions the code using intrinsics would look very similar: for(int i=0; i<size; i+=16) { y1 = _mm_load_ps(output[i]); … y4 = _mm_load_ps(output[i+12]); for(k=0; k<ksize; k++){ for(l=0;

C代码循环性能[续]

这个问题继续在我的问题上(根据神秘的建议): C代码循环性能 继续我的问题,当我使用打包指令而不是标量指令时,使用内部函数的代码看起来非常相似: for(int i=0; i<size; i+=16) { y1 = _mm_load_ps(output[i]); … y4 = _mm_load_ps(output[i+12]); for(k=0; k<ksize; k++){ for(l=0; l<ksize; l++){ w = _mm_set_ps1(weight[i+k+l]); x1 = _mm_load_ps(in

Floating multiplication performing slower depending of operands in C

I am performing a stencil computation on a matrix I previously read from a file. I use two different kinds of matrices (NonZero type and Zero type). Both types share the value of the boundaries (1000 usually), whilst the rest of the elements are 0 for Zero type and 1 for NonZero type. The code stores the matrix of the file in two allocated matrices of the same size. Then it performs an opera

取决于C中操作数的浮动乘法执行速度较慢

我正在对之前从文件读取的矩阵执行模板计算。 我使用两种不同的矩阵(非零型和零型)。 两种类型共享边界值(通常为1000),而其余元素对于零类型为0,非零类型为1。 代码将文件的矩阵存储在两个相同大小的已分配矩阵中。 然后使用它自己的值和邻居值(添加x 4和mul x 1)在一个矩阵的每个元素中执行一个操作,并将结果存储在第二个矩阵中。 一旦计算完成,矩阵的指针就会被交换,并且执行相同的操作的次数是有限的。 在

How are denormalized floats handled in C#?

Just read this fascinating article about the 20x-200x slowdowns you can get on Intel CPUs with denormalized floats (floating point numbers very close to 0). There is an option with SSE to round these off to 0, restoring performance when such floating point values are encountered. How do C# apps handle this? Is there an option to enable/disable _MM_FLUSH_ZERO ? There is no such option. Th

如何在C#中处理非规范化的花车?

只要阅读这篇有关在非常规浮点数(非常接近于0的浮点数)的英特尔CPU上可以获得的20x-200x速度减慢的迷人文章。 SSE有一个选项将它们舍入为0,当遇到这样的浮点值时恢复性能。 C#应用程序如何处理这个问题? 有没有启用/禁用_MM_FLUSH_ZERO的选项? 没有这样的选择。 C#应用程序中的FPU控制字在启动时由CLR初始化。 改变它不是框架提供的选项。 即使你试图通过禁止_control87_2()来改变它,它也不会持续很长时间;

huge elapsed time for multiplication of FLT

This question already has an answer here: Why does changing 0.1f to 0 slow down performance by 10x? 4 answers Denormalized Numbers - IEEE 754 Floating Point 1 answer The reason it takes much longer to do .9 * FLT_MIN is that the result is smaller than the smallest value a float can represent. This causes the processor to raise an exception, which is handled by the OS and may involve calli

FLT乘法的时间很长

这个问题在这里已经有了答案: 为什么将0.1f改为0会使性能下降10倍? 4个答案 非规范化数字 - IEEE 754浮点数1答案 花费很长时间做的原因.9 * FLT_MIN是结果小于浮点数可以表示的最小值。 这会导致处理器引发异常,该异常由操作系统处理,并可能涉及在用户空间中调用函数。 与一个简单的浮点乘法相比,这需要很长时间,而这完全是用硬件完成的。 如何解决它? 取决于你的平台和构建工具。 如果您使用的是gcc,那么