有没有尝试过用无符号或有符号整数来表示浮点
Have there been attempts to represent floats with unsigned or signed integers?
我想知道是否有研究和尝试设计类似浮点(IEEE754)的类型,其中小数部分和整数部分分别由int
或unsigned int
处理,或者任何其他类型的设计,可以导致用整数实现类似浮点。
我特别想研究一下一般性能、数值表示的有效范围等。。。以及你对此能说的任何话。
您在寻找固定点号还是小数浮点?甚至在gcc中也实现了它们。另请参阅这些关于十进制算术的资源。
不久前,我在comp.arch上问了这个问题,得到了一些非常好的答案,Mashey博士首先给出了这个问题:
|>我一直在想,是将所有的FP空间用于另外三个还是
|>四个整数单元,并为每个模型提供手动调整的FP-lib将
|>为自己买单,但我一直认为,如果可以这样做
|>付费,设计者会这么做的。也许现在超标量是
|>按照今天的顺序,很快就会完成。1) FP硬件是存在的,因为如果您关心
的FP性能总之,用典型的
来模仿所需的行为是非常困难的以合理的速度进行整数运算。这些天,典型的
FP add/mul的延迟约为2-3个时钟,具有1个周期的重复率。2) 当然,在微处理器方面有丰富的经验
提供图书馆进行FP而不使用FP单元的人的世界,
对于预计很少使用FP的系统,或
FP协处理器还不可用。
就是这样X86s、68KS和MIPS等。在MIPS的情况下:
(a) 有一些系统本身就有R2000
(b) 然后是一块很大的协处理器板
(c) 最后,R2010 FPU问世了,而且相当快,大多数
系统具有R2000&R2010.在嵌入式市场,
没有FPU的CPU有很多用途。3) 换言之:对于任何竞争对手来说:
这真的是一个很酷的想法放弃硬件FP并通过整数操作进行模拟:-)
您询问的问题的一个例子是"不动点"算术。如果你注意到在一个位置系统中,小数点在哪里并不重要,只要你正确地跟踪它,你就可以决定把点放在特定的地方。这是我想说的一个例子,在基数10中:123+456=5791.23+4.56=5.79
好吧,你也可以在二垒做同样的事。决定你的观点应该在哪里,并进行操作。早在8088和IBM PS/2 8086时代,我就让我的汇编语言和C++学生用这种方式绘制了一个简单的Mandelbrot集。如果您将自己限制在CPU寄存器的大小,但比模拟浮点库快得多,那么精度会非常高。
该网站似乎有更详细的信息:http://x86asm.net/articles/fixed-point-arithmetic-and-tricks/
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 检查TCHAR数组输入是否为带符号整数C++
- 如何打印boost多精度128位无符号整数
- C++模板函数,用于比较任何无符号整数和有符号整数
- 在数字之间插入 + 或 - 符号以使其等于整数
- 为什么:不同符号的整数比较只是偶尔发生?
- 将超出范围的整数分配给有符号字符类型
- 为什么乘以常量有符号整数分数没有优化?
- 如何解决隐式转换丢失整数精度:'size_t'(又名"无符号长")到'int'警告?
- 在线程中读取无符号整数时,c++ 位是否以原子方式切换?
- FlatBuffers/Protobuf 中是否有支持任意 24 位有符号整数定义的可移植二进制序列化架构?
- C++11 标准是否保证零值有符号整数的一元减号为零?
- 整数类型应该显式转换(例如"int"到"无符号")还是只会增加混乱?
- Constexpr 可变参数模板,用于对无符号整数进行重新排序
- AVX2 整数乘以有符号 8 位元素,产生有符号 16 位结果?
- 为什么 Clang 和 GCC 中两个无符号整数之和的结果类型不同
- 使用192/256位整数求和无符号64位整数向量的点积的最快方法
- 为什么对无符号字符进行算术运算会将它们提升为有符号整数
- 从 std::string 转换为 const 无符号整数
- 矢量浮点到整数/符号转换