Vdsp(bf561)中的浮点运算(4):FLT_MAX

FLT_MAX是在float.h中定义的一个常量,用以表示单精度浮点数的最大值。

#define FLT_MAX 3.4028234663852886E+38F

那么这个值从何而来?

从浮点数的表示可以知道,要取最大值,可以将指数和尾数都设置为最大值,由于标准规定将指数全为1留做特殊表示,故指数最大值为255,这个数即

0      11111110   11111111111111111111111

符号位    指数     尾数

从16进制整数看它的值就是 0x7f 7f ff ff。

根据浮点数的计算公式可知这个值为:

1. 9999997615814208984375 * 2(254-127)

= 3.4028234663852886E+38

这个是计算器的计算结果。

时间: 2024-08-30 21:42:44

Vdsp(bf561)中的浮点运算(4):FLT_MAX的相关文章

Vdsp(bf561)中的浮点运算(15):vdsp库的一个BUG

在写完fract除法之后,偶然发现在vdsp的一个头文件中提供了fract16除法运算的函数,这个文件就是VisualDSP 5.0\Blackfin\include\fract_math.h: /* Produces a result which is the fractional division of f1 by f2. Not a builtin * as written in C code. */ #pragma inline #pragma always_inline static

Vdsp(bf561)中的浮点运算(1):文档的说法

在vdsp提供的<VisualDSP++ 5.0 C/C++ Compiler and Library Manual for Blackfin Processors Revision 5.1, August 2008>中列出了vdsp支持的所有数据类型,其中与浮点有点的类型有: Type Bit Size Number Representation sizeof returns double 32 bits 32-bit IEEE single-precision 4 float 32 bit

Vdsp(bf561)中的浮点运算(16):fract2x16类型

由于BF561内部带有两个16位的MAC,因此它将可以在一个周期内进行两个fract16类型的运算. 为适应这种特性,vdsp引入了一个称之为fract2x16的类型.它其实是定义为一个int类型的整数,但是其实际意义却是要用高低16位分别来表示两个fract16类型. typedef int _raw32; typedef _raw32 raw2x16; typedef raw2x16 fract2x16; 要查看fract2x16类型的值还是只能通过data register窗口,手动将类型

Vdsp(bf561)中的浮点运算(11):fract16与float的转换

vdsp提供了两个函数用以实现fract16与float之间的相互转换: fract16 float_to_fr16 (float _x); float fr16_to_float (fract16 _x); 看看这两个转换函数到底做了什么. 1.1 float_to_fr16 这个函数的原始代码在Blackfin\lib\src\libc\runtime\fl2fr.asm中,先看看它的注释: /*************************************************

Vdsp(bf561)中的浮点运算(10):fract16类型表示

fract16是VDSP的另一种浮点类型,它使用1.15的格式: 最高位为符号位,其余为数据位,没有指数和尾数的概念. 最大值:+0.999969482421875 最小值:-1 分辨率:2-15 = 0.000030517578125 在blackfin里面使用fract类型进行计算可以获得最好的性能,但是要求在使用之前对需要进行计算的数据进行归一化,而且必须保证在计算过程中不会产生溢出. 在对数据归一化的时候,通常是需要进行浮点计算的,因此要产生很多额外的开销,如果使用fract进行的计算量

Vdsp(bf561)中的浮点运算(8):float除法运算

1.1 Vdsp对float除法运算的处理 在vdsp下,可以很简单地用: float fdiv(float x, float y) { float r = x / y; return r; } 来完成浮点除法运算,编译器自动将里面的乘法操作转换为___float32_div的函数调用,这个函数的调用实现在libdsp/fpdiv.asm中,在这个文件的开头说明了这个函数的用法: /*********************************************************

Vdsp(bf561)中的浮点运算(7):float乘法运算

1.1 Vdsp对float乘法运算的处理 在vdsp下,可以很简单地用: float mul (float x, float y) { float r = x * y; return r; } 来完成浮点乘法运算,编译器自动将里面的乘法操作转换为___float32_mul的函数调用,这个函数的调用实现在libdsp/fpmult.asm中,在这个文件的开头说明了这个函数的用法: /********************************************************

Vdsp(bf561)中的浮点运算(6):float加减运算

一直以为float加减运算很简单,无非就是将之转换为__float32_add和__float32_sub这两个函数调用而已,然后用软件模拟进行加减运算.但真的如此简单吗?当一些让人不太舒服的条件出现的时候,还是如此吗? 1.1 Vdsp对float加减运算的处理 在vdsp下,可以很简单地用: float add(float x, float y) { float r = x + y; return r; } float sub(float x, float y) { float r = x

Vdsp(bf561)中的浮点运算(14):fract16除法

原来指望能够有div_fr1x16之类的函数来实现fract16的除法,但是很遗憾vdsp居然不直接提供这样的函数,让人颇为尴尬,估计是因为其CPU不直接提供fract除法的缘故.不过vdsp文档里面提供了一个做除法的例子: fract16 saturating_fract_divide(fract16 nom, fract16 denom) { int partialres = (int)nom; int divisor = (int)denom; fract16 rtn; int i; in