float 转定点计算加法和乘法

定点数、浮点数和一些高级语言的实现  定点数、浮点数和一些高级语言的实现     什么是定点数、浮点数?    首先我们要认清一个概念,定点数不一定是整数,浮点数不一定是小数。    如其名,浮点数和定点数的区别就在于浮点和定点上,点就是指小数点。浮点数就是小数点是浮动的,定点数就是小数点是固定不动的。    具体,什么是浮点数?    浮点数是在计算机中用以近似表示任意某个实数。具体的说,这个实数由 阅读详情
float 浮点数转成定点数计算其加法和乘法

需要注意的是,以下的程序是建立在下述条件为真的情况下的:

(sizeof(float) == 4 && sizeof(long long) == 8 && sizeof(int) == 4) == ture

也就是说,一定要保证float和int是占4个字节(32bits),long long是占8个字节(64bits)的。

1, 浮点数转定点乘法
void FixedPointMul(float&a, float& b, float& res)
{
   int ia = *(int*)(&a);
    int ib = *(int*)(&b);
    //正负0的情况下,直接返回
    if (ia == 0x80000000 || ia == 0x0 || ib == 0x80000000 || ib == 0x0)
    {
        res = 0.0f;
        return;
    }
    //实际尾数还要加上最前面的1,这里用Long long的原因是两个24位数的乘法,最多是48位,已超出int
    long long ma = (ia & 0x7fffff) | 0x800000;
    long long mb = (ib & 0x7fffff) | 0x800000;
    //码位
    int ea = ((ia >> 23) & 0xff) - 0x7f;
    int eb = ((ib >> 23) & 0xff) - 0x7f;
    //mul
    long long mc = ma * mb;//相当于a<< (23-ea) a<<(23-eb)
    //计算阶码
    //先计算最高有效位
    int i = 0;
    long long tmp = mc;
    while (tmp != 0)
    {
        tmp >>= 1;
        i++;//得到MSB的位置
    }

    int ec = i - 1 - (23 - ea + 23 - eb) + 0x7f;
    //再右移mc MSB 到第24位
    //把MSB移位到第24位
    //把MSB移位到第24位
    if (i < 24)
        mc = (mc << (24 - i)) & 0xffffff;
    else
        mc = (mc >> (i - 24)) & 0xffffff;
    //
    //标记两个数的正负
    int sa = 0;
    if ((ia & 0x80000000) ^ (ib & 0x80000000))//xor
        sa = 1;//negative
    //float
    //拼接成float
    int rc = 0x00000000;
    rc = rc | (mc & 0x7fffff);
    rc = rc | ((ec << 23) & 0x7fffffff);
    //判断正负
    if (sa == 1)
        rc = rc | 0x80000000;
    res = *(float*)(&rc);
    return;
}
2, 浮点转定点加法(减法可以认为是加上一个负数)
#ifndef MAX
#define MAX(X,Y) ((X)>(Y) ? (X) : (Y))
#endif
void FixedPointAdd(float& a, float& b, float& res)
{
   int ia = *(int*)(&a);
    int ib = *(int*)(&b);
    //考虑正负0的情况
    if (ia == 0)
    {
        res = b;
        if(ib == 0x80000000)
            res = 0.0f;

        return;
    }
    if (ib == 0)
    {
        res = a;
        if (ia == 0x80000000)
            res = 0.0f;
        return;
    }
    //if ((ia & 0x7f800000 == 0x7f800000) | (ib & 0x7f800000 == 0x7f800000));
    //实际尾数还要加上最前面的1
    long long  ma = (ia & 0x7fffff) | 0x800000;
    long long  mb = (ib & 0x7fffff) | 0x800000;
    //码位
    int ea = ((ia >> 23) & 0xff) - 0x7f;
    int eb = ((ib >> 23) & 0xff) - 0x7f;
    //正负
    int sa = ia & 0x80000000;
    int sb = ib & 0x80000000;
    //移动到48位并加上符号运算
    if (ea > eb)
    {//让较大的数的MSB移动到第48位,较小的数对应的移动
        //这样的话,小数点对齐在哪里?
        ma <<= 24;
        //mb如何移动?//mb少移动:ea与eb的绝对值的差
        mb <<= (24 - std::abs(ea - eb));
    }
    else
    {
        mb <<= 24;
        ma <<= (24 - std::abs(ea - eb));
    }
    //考虑符号
    ma = (sa == 0 ? ma : -ma);
    mb = (sb == 0 ? mb : -mb);
    long long mc = ma + mb;
    int i = 0;
    long long tmp = 0;
    //结果符号
    tmp = 0x8000000000000000;
    int sc = ((mc & tmp) == 0 ? 0 : 1);
    if (sc == 1)//说明结果是负数
    {
        mc = -mc;
    }
    //计算阶码
    //先计算最高有效位
    tmp = mc;
    while (tmp != 0)
    {
        tmp >>= 1;
        i++;//得到MSB的位置
    }
    //code
    int ec = 0x7f;
    if (ea > eb)
        ec += ea + (i - 48);
    else
        ec += eb + (i - 48);
    //把MSB移位到第24位
    if (i < 24)
        mc = (mc << (24 - i)) & 0xffffff;
    else
        mc = (mc >> (i - 24)) & 0xffffff;
    //
    //float
    //拼接成float
    int rc = 0x00000000;
    rc = rc | (mc & 0x7fffff);
    rc = rc | ((ec << 23) & 0x7fffffff);
    //判断正负
    if (sc == 1)
        rc = rc | 0x80000000;
    res = *(float*)(&rc);
    return;
}

最后需要注意的是,float占4个字节的情况下,在二进制情况下,共有24bit数字是精确数字,转换到十进制数, 只有6位有效数字是绝对精确的,所以在两个float数字比较其误差时,应注意,第7位及以后的数字是无意义的。
比如说:12345.67888和12345.6999其实对于float的内存来说是一样的,但是它们之间的绝对误差是:0.02111,达到了2%。
再比如:123456.000和123456.9999,在float的内存上是一样的,但是,其绝对差为0.9999。
所以用绝对差来表示两个float数是否相近,是不合理的。

嵌入式开发实战:浮点转定点运算优化与Q格式应用详解 在嵌入式系统与数字信号处理领域,定点数运算是一项基础且关键的技术。其核心原理在于使用整数来模拟小数运算,通过预设的缩放因子(如2的幂次)将浮点数映射到整数域进行处理。这种方法的根本价值在于,它能够以确定性的执行时间、极低的CPU开销和内存占用,替代对硬件浮点单元(FPU)的依赖,从而在资源受限的微控制器(MCU)上实现高性能计算。从技术实现角度看,Q格式(如Q15、Q31)是定义虚拟小数点位和数值精度的通用约定,它规范了定点数的表示与运算规则。这使得定点数技术广泛应用于对实时性、能效和成本有严苛要求的场景, 阅读详情

相关推荐

EC20模块实战:5步搞定MQTT连接阿里云IoT(附常见错误排查)

本文详细介绍了使用EC20 4G模块通过AT指令连接阿里云IoT平台的完整实战流程。文章以智能农业项目为背景,从硬件接线、网络注册、PDP激活,到MQTT连接配置、一型一密动态注册及数据收发,提供了清晰的5步操作指南,并重点附上了常见错误排查方法,帮助开发者快速实现稳定可靠的物联网设备上云。

weixin_29209801的博客 196

矩阵系列:浮点转定点

浮点转定点是个比较基础的知识点吧,所以作为开篇,简单的举几个小例子,通过例子,相信大家都能掌握它。 简单说明一下,浮点包括 符号位|指数位|小数位。浮点的类型包括 单精度浮点数|双精度浮点数。这里用到的是单精度浮点数。单精度浮点数:1位符号位,8位指数位,23位尾数位。也有说是24位尾数位,这里笔者认为这样划分,更便于说明(我的地盘听我的,嘿嘿)。 浮点转定点的步骤如下:a)将浮点数划分 符号位|指数位|小数位; b)计算指数位与偏差位的值;单精度浮点数的偏差值固定为127. c)计算并得到定点数。 看例子

u012938458的博客 1012

UDS $27服务DLL文件生成

UDS 27算法 DLL文件生成

hkj8808的博客 1282

定点数与浮点数

再正数范围内,数据位和我们所理解的原码相同,但是来到负数的范围的时候,情况就完全不一样了,实际上负数的数据位可以有很方便的计算法则。(注意,使用二补码进行的四则运算的结果也都是二补码),然后二补码得到其真值,若为整数就是读数据位就行了,对于负数的结果,如果不去背表的话,那么其真实值应该是其数据位减1再取反。值得注意的是, 2补码格式还有一个优良的累加溢出性质: 当多个2补码数据相加时, 如果加法的中间结果溢出, 但是如果理论上的最终结果是不溢出的, 则2补码数的加法结果也不会溢出。

TValentine的博客 1584

Vue3多级路由缓存失效的深度解析与实战解决方案

本文深度解析了Vue3项目中多级路由嵌套下keep-alive缓存失效的根本原因,并提供了三种实战解决方案。通过剖析组件树、router-view与keep-alive的协作机制,揭示了缓存无法穿透多层router-view的技术本质。文章对比了路由扁平化重构、状态管理配合路由守卫以及使用社区插件等方案的优缺点与适用场景,为开发者解决这一常见难题提供了清晰的选型指导。

weixin_29001423的博客 271

31、工程中不确定性量化与优化的全面解析

本文全面解析了工程中不确定性量化与优化的关键方法。针对数据充足与不足两种情况,分别介绍了概率理论和非概率方法在不确定性建模中的应用;系统阐述了采样方法、FORM/SORM、泰勒级数近似等不确定性传播技术;深入比较了RBDO与RDO两种主流优化框架的原理、步骤及适用场景,并通过两杆桁架案例展示了具体实现过程。文章旨在为工程师提供一套完整的从不确定性分析到优化设计的方法论,提升工程系统的可靠性与稳健性。

php55的博客 121

有符号定点数加法

对齐小数点后,整数部分位宽少的就扩展符号位;小数部分位宽少的就补0。若有符号定点数A的整数部分(含符号)位宽是m,小数位宽是n。若有符号定点数B的整数部分(含符号)位宽是p,小数位宽是q。则A+B的和的位宽是max(m,p)+max(n,q)+1。在相加时,对齐小数点后再相加。

yan20021441的博客 427

第39步 深度学习图像识别:Inception V3建模(Tensorflow)

第39步 深度学习图像识别:Inception V3建模(Tensorflow)

Jet4505的博客 3168

【亲测免费】 浮点数转换器(FloatConv)实战指南

浮点数转换器(FloatConv)实战指南 项目介绍 FloatConv 是一个用于转换浮点数表示的开源工具,由 m-ou-se 开发并维护。它允许用户轻松地将浮点数转换成十六进制形式,反之亦然。支持多种浮点数格式,包括bf16、fp16(IEEE 754二进制16位)、fp32以及fp64(IEEE 754二进制64位)。对于不原生提供这些转换功能的目标平台,FloatConv提供了软件实现;...

gitblog_00653的博客 1581

机器学习笔记 - 基于深度学习(HomographyNet)的图像单应性估计

论文提出了一个深度卷积神经网络来估计一对图像之间的相对单应性。我们的前馈网络有10层,以两个堆叠的灰度图像作为输入,并产生一个8自由度的单应性,可用于映射从第一个图像到第二个图像的像素。我们为HomographyNet提出了两种卷积神经网络架构一个直接估计实值单应性参数的回归网络,以及一个在量化单应性上产生分布的分类网络。我们使用4点单应性参数化,将一个图像的四个角映射到第二个图像。我们的网络使用扭曲的MS-COCO图像以端到端的方式进行训练。论文的贡献如下。........................

学以致用 知行合一 3083

使用 MATLAB/Simulink 构建一个基于FOC控制的PMSM矢量控制仿真模型

本教程详细介绍了基于MATLAB/Simulink的永磁同步电机(PMSM)磁场定向控制(FOC)系统建模与仿真方法。主要内容包括:PMSM电机模型参数设置、Clarke/Park变换模块设计、电流环PID控制器配置、SVPWM调制实现以及系统仿真参数优化。文章提供了模块化设计思路和具体参数设置示例,并给出了PID整定建议和进阶优化方向。通过该仿真模型,可深入理解PMSM矢量控制原理,掌握高性能电机控制系统的建模技巧,适用于伺服系统、电动汽车驱动等高端控制场景。教程还推荐了实时仿真和高级控制策略等扩展应用。

xiaoheshang_123的博客 528

日常随记——浮点数与定点数转化程序设计

本文旨在讨论float字型向定点数字型转换的具体方案,并以10位小数为例。欠缺测试,欢迎交流讨论无。

qq_23297513的博客 866

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Xilinx DSP48E2 slice 一个周期能做几次float32浮点数乘法或者加法?如果是fix 32定点数呢?

理解这一点,关键在于了解 DSP48E2 Slice 的内部硬件结构和其设计目的。DSP Slice 主要包含高性能的乘法器、加法器/累加器 (ALU) 以及相关的预加器、寄存器和控制逻辑,专门用于优化数字信号处理和高性能计算中的常见运算,尤其是乘法和加法/累加操作。一个标准的 DSP48E2 Slice在一个时钟周期内完成一个完整的 float32 浮点数乘法或加法。一个 DSP48E2 Slice在一个周期内完成一个完整的 float32 乘法或加法。

kanhao100的博客 1372

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

浮点转定点(以float32转int8)为例

最终结果是将浮点数7.6表示为定点数122(011111010),通过上面步骤实现浮点数到定点数的转换。小数部分: 1010(二进制)表示为 0.625(十进制),占用 4 位。,是一种神经网络优化方法,一来减少内存需求,而来提高读取和处理的效率。转换为二进制(假设带符号): 122的二进制表示为01111010。整数部分: 111(二进制)表示为 7(十进制),占用 3 位。结果为 7.625,可以认为是进行舍入后的近似值,因此验证通过。符号位 : 0(正数)。转换为整数: 122。

weixin_45697971的博客 3693

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

浮点转定点算法-加法运算

#defineMIN(X,Y)(X>=Y?Y:X) /**浮点的加法运算转换为定点的加法运算 *author:zgr2014-04-03 *1.内存中符号位+阶码+尾数的浮点表示法转换为符号位+整数部分+尾数部分的表示法 *2.找到合适的Q值,并取较大的...

chuwangpian7066的博客 402

C++大数加法、乘法

C语言或c++在数值计算过程中,我们会发现当计算一些小的数时,计算的结果是对的,但是当我们计算一些大数时,往往与结果不一样。为什么会出现这样的原因呢?以下有一些解释。 一、数据类型的限制 C 和 C++ 中有多种数据类型,每种数据类型都有其特定的取值范围。例如,int类型通常占用 4 个字节,其取值范围在不同的系统中可能有所不同,但一般在 -2147483648 到 2147483647 之间。long long 类型也是有范围的。当计算的数值超出这个范围时,就会发生溢出,导致结果错误。 对于

haochenai的博客 2039

java乘法 加法谁先_java 大数的加法和乘法

1、基本类型:int 二进制位数:32包装类:java.lang.Integer最小值:Integer.MIN_VALUE= -2147483648 (-2的31次方)最大值:Integer.MAX_VALUE= 2147483647 (2的31次方-1)2、基本类型:short 二进制位数:16包装类:java.lang.Short最小值:Short.MIN_VALUE=-32768 (-2的...

weixin_30402231的博客 395

java两数相乘的函数_jquery 加法 乘法运算 精确计算函数

int类型相加不会出现问题,但小数点相加就会出现问题//乘法函数var accMul = function(arg1, arg2){var m=0,s1=arg1.toString(),s2=arg2.toString();try{m+=s1.split(".")[1].length}catch(e){}try{m+=s2.split(".")[1].length}catch(e){}return...

weixin_28921621的博客 715

verilog 定点数、浮点数是什么?怎么表示?怎么做运算?

对于计算机如何表示二进制的定点数的理论,网上及书上都有说明,但是如何用verilog代码写出来呢?这就是本文主要学习的内容。 1. 定点数的表示和运算 1)定点数概念 定点数主要是确定小数点的位置,小数点后的二进制位数越多,所表示的数据的精度就越高,例如下图能表示的精度就是2^(-5)=0.03125,误差也就<0.03125。下图所表示的数= 也可以表示为:0xff/2^5=7.96875. 2)定点数的表示 模块之间的...

weixin_41155462的博客 5977

定点数乘法实战:从Q格式到混合精度与溢出处理

在嵌入式系统、数字信号处理等资源受限场景中,浮点运算单元往往不可用或成本过高,定点数表示法成为关键替代方案。其核心原理是用整数运算模拟小数,通过预设缩放因子(常为2的幂次)来隐含小数点的位置。这种技术能在保证确定性的前提下,显著提升计算效率并降低硬件开销。定点数的工程价值在于为音频处理、图像卷积、传感器数据处理等实时系统提供了可靠的数值计算基础。然而,定点乘法涉及位数扩张、溢出风险、精度损失等挑战,尤其在混合精度运算和矩阵乘法等复杂场景中更为突出。本文以Q格式为基础,通过实例深入解析定点数乘法的核心操作、舍

weixin_33957648的博客 348

float、double计算中精度丢失的处理

参考http://blog.youkuaiyun.com/luweicheng24/article/details/77800688import java.math.BigDecimal; public class T { public static void main(String[] args) { String aaString="37.10"; System.err.println(Do

codehxy的专栏 3997

一个基础而奇怪的问题:算法执行加法、乘法、除法性能无区别?

一个基础而奇怪的问题:算法执行加法、乘法、除法性能无区别? 计算机原理分析觉得:加法、乘法和除法的计算性能依次减少,但减少到什么程度? 编写C程序用30次百万数据计算来測试时间差异性,代码例如以下: #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 1...

adr5970的博客 324

STM32 F407 带FPU float Q5.10 运算时间对比

最近在鼓捣FOC 就是那个无刷驱动 用STM32F407+DRV8305的方案 一开始自己写FOC的时候全用的float来计算,后来遇到一点(亿点点)问题,便在网上借鉴别(^C + ^V)人的代码,发现有人使用了定点数来运算,便好奇两种方式速度能差多少,就做了下对比(本来我以为定点可以秒杀浮点 哪怕有FPU) 平台:STM32F407 开FPU freertos系统滴答频率是1000HZ,所以1tick就是1ms keil关闭代码优化(开了也一样) 首先自己定义了Q5.10 的数据结构(我试了试Q10.21

qq_23484919的博客 4414

java无限大加法和乘法的实现

Java中存储数字的类型有 short,int,long,double,float。他们的存储数据的大小是有限制的。以下来回顾下各个数据类型的存储大小的差别:1、基本类型:short 二进制位数:16 包装类:java.lang.Short 最小值:Short.MIN_VALUE=-32768 (-2的15此方)最大值:Short.MAX_VALUE=32767 (2的15次方-1)2、基本类型:...

weixin_42314220的博客 1565
上一篇: IEEE754 C++ float的内存布局.md
下一篇: google test 学习笔记1-google test primer.md
beichen
博客等级 码龄16年 4粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值