问题标签 [fixed-point]
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.
floating-point - 定点算法的浮点转换
我有一个使用 24 位定点计算的应用程序。我将它移植到支持浮点的硬件,因此为了速度优化,我需要将所有基于定点的计算转换为基于浮点的计算。
对于此代码段,它正在计算尾数
因此,由于此计算,确实将整数转换为尾数,并将指数转换为定点精度(23 位)。当我尝试将其转换为浮点数时,将尾数部分除以精度位并用精度位减去指数部分,它真的不起作用。请帮助提出更好的方法。
performance - 定点算术值得我麻烦吗?
我正在研究应该实时运行的流体动力学 Navier-Stokes 求解器。因此,性能很重要。
现在,我正在研究许多紧密循环,每个循环都占执行时间的很大一部分:没有单一的瓶颈。这些循环中的大多数都执行一些浮点运算,但中间有很多分支。
浮点运算主要限于加法、减法、乘法、除法和比较。所有这些都是使用 32 位浮点数完成的。我的目标平台是至少带有 SSE1 指令的 x86。(我在汇编器输出中验证了编译器确实生成了 SSE 指令。)
我正在使用的大多数浮点值都有一个相当小的上限,接近零值的精度并不是很重要。所以我想到了:也许切换到定点算术可以加快速度?我知道真正确定的唯一方法是衡量它,这可能需要几天时间,所以我想事先知道成功的几率。
定点在 Doom 时代风靡一时,但我不确定它在 2010 年的表现如何。考虑到现在有多少硅投入到浮点性能中,定点算法是否仍有机会给我一个显着的速度提升?有没有人有任何可能适用于我的情况的实际经验?
java - 反向公式转换
我有一个计算 Y 位置的公式,这里是:
现在我有了 sy,我需要像这样计算 y:
但转换不等于.. 我认为是因为我不知道如何转换 ~ 和 & 运算符。
android - 在 Android 上使用 GL_FIXED 或 GL_FLOAT 更好吗
我本以为这样会GL_FIXED
更快,但 iPhone 文档实际上说要使用GL_FLOAT
,因为GL_FIXED
必须转换为GL_FLOAT
. 安卓上也一样吗?我想它因手机而异,但最近流行的手机(Nexus One、Droid/Milestone 等)呢?
奖励积分:这似乎完全没有记录(例如在谷歌搜索GL_FIXED
!)但是“点”在GL_FIXED
哪里?即(GL_FIXED)1
值多少钱?
fixed-point - 定点乘法“解决方案”是疯狂的还是可行的?
假设这么多:
我使用的是 16.16 定点系统。
系统是 32 位的。
CPU 没有浮点处理器。
对于任何大于 1.0 * 0.4999 的乘法,溢出是迫在眉睫的
最后一个假设...假设我正在工作的值不会高到导致此操作溢出...
所以问题是......这是天才的一击(并不是说它还没有被想到或任何东西)还是完全浪费时间?
c++ - C++定点库?
我正在寻找一个免费的 C++ 定点库(主要用于嵌入式设备,而不是用于任意精度数学)。基本上,要求是:
- 没有不必要的运行时开销:任何可以在编译时完成的,都应该在编译时完成。
- 能够在定点和浮点之间透明地切换代码,没有固有的开销。
- 定点数学函数。如果您需要来回转换以求平方根,则使用定点没有多大意义。
- 占地面积小。
有什么建议么?
assembly - 手臂组装机在乘法长后右移?
新手ARM汇编程序问题。我正在编写我的第一个 arm 汇编程序,我正在尝试编写这个 C 片段。
我已经对第一部分进行了编码并计算了 r10、r11 寄存器中的总和。
现在我需要通过将“long long”右移 24 位来从 r10 和 r11 寄存器中提取“res”的值。我怎么做 ?
-谢谢,
math - C中的浮点算法
我最近在思考浮点数学是如何在计算机上工作的,我很难理解公式背后的所有技术细节。我需要了解加法、减法、乘法、除法和余数的基础知识。有了这些,我将能够制作三角函数和公式。
我可以猜到一些东西,但它有点不清楚。我知道可以通过用信号标志、基数和尾数分隔一个 4 字节整数来确定一个固定点。有了这个,我们有一个 1 位标志、一个 5 位基数和一个 10 位尾数。一个 32 位的字非常适合浮点值 :)
要在两个浮点数之间进行加法,我可以简单地尝试添加两个尾数并将进位添加到 5 位基数?这是一种进行浮点数学(或定点数学,是真的)的方法,还是我完全错了?
我看到的所有解释都使用公式、乘法等,我猜它们看起来很复杂,会更简单一些。我需要一个更针对初学者而不是数学家的解释。
c - 已知范围内的定点乘法
我正在尝试以A*B
16 位定点乘法,同时保持尽可能高的精度。A
是无符号整数范围内的 16 位,B
除以 1000 并且始终介于0.001
和之间9.999
。自从我处理这样的问题以来已经有一段时间了,所以:
- 我知道我可以
A*B/1000
在移动到 32 位变量后做,然后剥离回 16 位 - 我想让它比那更快
- 我想在不移动到 32 位的情况下完成所有操作(因为我只有 16 位乘法)
有什么简单的方法可以做到这一点吗?
编辑:A
将介于 0 和 4000 之间,因此所有可能的结果也在 16 位范围内。
编辑:来自用户,在掩码中B
逐位设置,这就是为什么操作是.X.XXX
/1000
floating-point - float to fixed conversion with different scaling factors
Can anyone please let me know What will be the difference between these approcahes when I convert fixed to float and float to fixed.
a)
int a=32767;
float b = 32765*(1/32767) // 16 bit scaling factor
int c = b*32767;
b)
int a=32767;
float b = 32765*(1/1.0) // scaling factor=1
int c = b*1;
a)
int a=32767;
float b = 32765*(1/0x80000) // 24 bit scaling factor
int c = b*(0x80000);
If my machine uses Q23 fixed point representation, which should I use ?