Double和Float中的NaN、Infinite等常量字段详解

Python整数转浮点数:语义声明而非类型转换 在Python中,'整数转浮点数'并非底层内存类型的强制转换,而是创建具备IEEE 754浮点语义的新对象的过程。其本质是数据精度与数值表示域的主动声明,涉及对象生命周期、内存分配及精度边界等核心机制。这一操作直接影响科学计算(如Numpy数组dtype)、JSON序列化兼容性、除法语义一致性及外部API协议适配等关键场景。理解float()的不可变性、id变化特性及精度陷阱(如2**53+1失真),是规避AttributeError、ValueError和静默精度丢失的前提。本文聚焦Python原生flo 阅读详情

Double和Float中的NaN、Infinite等常量字段详解

在采用Java进行数值运算,特别是double和float时,经常会遇到需要判断某个数是否为一个数(NaN)、是否为无(Infinite)。一个数都已经是double或者float数据类型的了,为什么还说它不是一个数(Not a Number)呢?这就要从数学上来说了。

对于除法,一个数与另一个数的运算存在以下几种情况:

情形被除数除数结果
10非00
200非法
3非00非法
4非0非0非0

显然,在实际的Java数值运算中,以上四种情况都需要考虑到,并且实际使用中也确实是这样的。当遇到情形2以及情形3中除数是整数时,Java会抛出异常java.lang.ArithmeticException: / by zero。

当然,以上是初等数学的内容,高等数学中还会有“无穷”这种概念存在。在一般的数学学科中,无穷不是一个数,它是任意大的数,表示一种趋势。但是在实变函数中,无穷却是一个常量。同样的,在Java中,无穷同样不是一个数。

那么在Java中如何表示无穷呢?对于情形3,将被除数改为0.0即可得到无穷大(POSITIVE_INFINITY或者NEGATIVE_INFINITY)。那么无穷小呢?在Double和Float的常量字段值表中并没有无穷下这个常量字段,实际上0.0就代表了无穷下,并且一个数除以0.0是不会抛出异常的。

那么NaN是如何产生的呢?当将一个非数字转换为数字以及有非数字参与数值计算的时候就会产生NaN;另一种情形是,当除数为0或0.0,而被除数为0.0的时候,也会产生NaN。

以下是几种特殊的数值运算:

情形被除数除数结果
1number0ArithmeticException: / by zero
20或者0.00.0NaN
3非0的number0.0Infinity或者-Infinity
4MAX_VALUEMIN_VALUEInfinity

对于这几种情形,如何进行判断呢?

Java中提供了几种方法:

  1. isInfinite() 用于判断一个数是否为无穷大(包括正无穷大与负无穷大),以下为源码实现:
/**
     * Returns {@code true} if the specified number is infinitely
     * large in magnitude, {@code false} otherwise.
     *
     * @param   v   the value to be tested.
     * @return  {@code true} if the value of the argument is positive
     *          infinity or negative infinity; {@code false} otherwise.
     */
public static boolean isInfinite(double v) {
    return (v == POSITIVE_INFINITY) || (v == NEGATIVE_INFINITY);
}
  1. isNaN() 用于判断一个数是否是一个数,如下源码:
/**
     * Returns {@code true} if the specified number is a
     * Not-a-Number (NaN) value, {@code false} otherwise.
     *
     * @param   v   the value to be tested.
     * @return  {@code true} if the value of the argument is NaN;
     *          {@code false} otherwise.
     */
public static boolean isNaN(double v) {
    return (v != v);
}
  1. isFinite() 用于判断一个数时候是一个可用的数字,当输入是Infinity时,返回false,如下源码:
/**
     * Returns {@code true} if the argument is a finite floating-point
     * value; returns {@code false} otherwise (for NaN and infinity
     * arguments).
     *
     * @param d the {@code double} value to be tested
     * @return {@code true} if the argument is a finite
     * floating-point value, {@code false} otherwise.
     * @since 1.8
     */
public static boolean isFinite(double d) {
    return Math.abs(d) <= DoubleConsts.MAX_VALUE;
}

注意:isFinite方法是java 8新加入的方法。

Cheat Engine 6.8.1源码深度解析:Windows内存调试工程范式 内存调试是Windows平台逆向分析、游戏修改与安全工具开发的核心能力,其本质依赖于进程内存枚举、跨权限读写、高效扫描匹配等底层机制。Cheat Engine作为经十年验证的开源标杆,其6.8.1版本源码完整封装了从Ring3到Ring0的工程实现路径,涵盖Delphi环境适配、Windows SDK与驱动签名协同、ScanEngine四层过滤架构、ce64.sys内核通信协议等关键技术环节。该源码不仅是可编译的项目,更是理解Windows内存管理子系统(如MmMapIoSpace、VirtualQuery 阅读详情

相关推荐

手把手教你用WKT文件在Petrel中创建自定义坐标系统(附CGCS2000转换模板)

本文详细介绍了如何在Petrel软件中利用WKT文件创建自定义坐标系统,并重点提供了CGCS2000坐标系的完整转换模板与实战步骤。通过解析坐标系统的三大支柱(大地坐标系、投影坐标系、基准转换)和WKT文件结构,指导用户从零开始构建适用于本土化项目的坐标系统,确保地质建模与空间数据处理的精度与一致性。

gpt4scribbler的博客 277

Double里边的NaN是什么?

先看源码: /** * A constant holding a Not-a-Number (NaN) value of type * {@code double}. It is equivalent to the value returned by * {@code Double.longBitsToDouble(0x7ff8000000000000L)}. */ public static final double NaN = 0.0d / 0.0; 翻译过来: NaN是...

Morning Sunshine的IT技术博客 8505

opencv读取海康威视摄像头相关配置

1、开发环境 海康威视的网络摄像头使用: 开发工具:vs2015 C++ 海康SDK 2、相关操作 下载海康威视SDK:网址:http://www.hikvision.com/cn/download_61.html • 1:对照自己的开发平台可以下载设备网络SDK_Win32设备网络SDK_Win64,解压到本地文件下: • 2:VS配置 、Opencv配置。参考址 http://blog.youkuaiyun.com/poem_qianmo/article/details/19809337 (建议自己创

HMJ115的博客 984

Double类型出现的nan问题

最近在调查问题的时候,发现了一个double类型在打印时出现nan。在解决完后随手记下笔记。 1、什么时nan nan的意思是“Not a Number”,不是一个数值,或者无法表示的数值。 2、为什么会出现nan 主要有一下几点: a. 对负数开方 b. 对负数求对数,如:log(-1.0) c. 0为分母, 如3.0/0.0 d. 未对double类型初始化,使用的时候就是nan 我遇到的就是最后一种,未对double类型初始化,其在内存里的存值就是一个nan, 在之后的计算过程中

hybohehe的博客 1万+

48、住宅抵押贷款支持证券的定价、风险评估与结构化设计

本文深入探讨了住宅抵押贷款支持证券(RMBS)的定价、风险评估与结构化设计。内容涵盖提高定价准确性的方差缩减方法,如准蒙特卡罗序列的应用;分析RMBS面临的利率风险、信用风险和模型风险,并提出相应的度量与应对策略;介绍利用动态规划优化CMO分层结构以最大化发行利润的方法。同时总结了RMBS的基本类型、定价流程及市场发展趋势,为投资者和发行人提供全面的决策支持。

quiet的专栏 154

MicroChip的SmartFusion2的M2S090芯片的全流程开发环境搭建和Demo设计

MicroChip的SmartFusion2的M2S090芯片的全流程开发环境搭建和Demo设计

qq_45806640的博客 455

关于Double中的NaN问题

其中红框部分,是抛出的异常,条件为Double无穷大或NaN,以前对Double的认识停留在浅薄的表面,遇到问题,才发现还有这两种情况。Double提供了判断两种情况的方式,还有其他的判断方法,有兴趣的可以自己查阅。最近在写代码时,因为涉及到计算,当时用了Double作为返回值,后续转成BigDecimal,但在测试过程中,发现有事会报异常:NumberFormatException:Infinite or NaN。1.可以用加入对NaN的判断。

记录点点滴滴的成长。 1137

Swin Transformer 与 CNN 结合实现图像分类

Swin Transformer 与 CNN 结合实现图像分类。(含swin transformer 结构讲解,cnn网络搭建,代码)

这里是Mae。 5026

Java中Double、Float类型的NaN和Infinity

Java在处理浮点数运算时,提供了NaN和Infinity两个常量。

qq_43842093的博客 1436

1、vectorCast单元测试常用操作

进入软件主页面,点击file,选择set working directory,随便选择一个保存该项目的目录即可。

weixin_59334478的博客 2156

vscode配置matlab工作环境

前面有两篇文章我们分别讲了在vscode里面如何配置C语言环境和python环境,那两篇文章总体来说比较复杂,当然这篇也有许多有趣的问题。 附上链接: 文章目录matlab简介基本要求code runner插件与matlab相关的插件添加路径小结code runner是否支持更多语言更多选择另一个选择 matlab简介 MATLAB是美国MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。 MATLAB是ma

Cachel Wood的博客 4540

java double 常量_Double和Float中的NaN、Infinite等常量字段详解

在采用Java进行数值运算,特别是double和float时,经常会遇到需要判断某个数是否为一个数(NaN)、是否为无(Infinite)。一个数都已经是double或者float数据类型的了,为什么还说它不是一个数(Not a Number)呢?这就要从数学上来说了。对于除法,一个数与另一个数的运算存在以下几种情况:情形被除数除数结果10非00200非法3非00非法4非0非0非0显然,在实际的J...

weixin_39996096的博客 545

Linux C/C++ or 嵌入式面试之《C/C++笔面试系列》(10) C++ 前置后置增减运算符重载形式与比较

C语言的++、–运算符在此不讨论。 文章目录1、前置后置增减运算符重载的形式2、前置和后置运算符的性能比较 1、前置后置增减运算符重载的形式 自增运算符“++”和自减运算符“–”分别包含两个版本。即运算符前置形式(如 ++x)和运算符后置形式(如 x++),这两者进行的操作是不一样的。因此,当我们在对这两个运算符进行重载时,就必须区分前置和后置形式。C++根据参数的个数来区分前置和后置形式。如果按照通常的方法来重载 ++ 运算符(即作为成员函数重载时不带参数,或者作为非成员函数重载时带有一个参数),那么重载

二进制君 5831

fast_float 源码深度解析:SciPy 中比 strtod 快 4 倍的 C++ 浮点解析库

fast_float 是 Daniel Lemire 等人开发的 C++ 浮点数字符串解析库,以 header-only 形式提供了对标 C++17 `std::from_chars` 的 `float`/`double` 解析实现,在同样保证 IEEE 精确舍入(含 round to even)的前提下,实测速度比标准库 `strtod` 快数倍。本文以 [fast_float 附带文档](ht

gitblog_00533的博客 260

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

详解 浮点数的规格化表示

《深入理解计算机系统》(兰德尔 E. 布莱恩特)中对浮点数的描述不容易懂,在这里记录一下,以加深理解。 1、IEEE浮点表示 IEEE(读作“eye-triple-ee”)浮点标准754中,用图1的形式来表示一个数: 图1 浮点数表示形式​​​ 符号(sign)——s决定这个数是负数(s=1)还是正数(s=0),而对于数值0的符号位解释,作为特殊情况处理; 尾数(significand...

Hello.Aaric的博客 4万+

深度学习工具包 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")

MuPDF 几何数学指南:fz_point、fz_rect、fz_matrix 与 fz_quad 类型及变换函数全解析

MuPDF 作为 SumatraPDF 的 PDF 渲染引擎,其内部的一切几何操作——页面布局、坐标变换、文字命中框、渲染裁剪——都建立在少量精悍的数学类型之上。本文以 MuPDF 官方参考文档 `ext/mupdf/docs/reference/c/fitz/math.md` 为核心骨架,逐层拆解 `fz_point`、`fz_rect`、`fz_irect`、`fz_matrix`、`fz_q

gitblog_00933的博客 690

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Swift 浮点数近似相等比较:解读 SE-0259 的 isAlmostEqual 与 isAlmostZero 设计

SE-0259([Approximate Equality for Floating Point](https://link.gitcode.com/i/1dbc13ad21091dee607635bc2bc3013c))是 Swift Evolution 仓库中一份针对标准库 `FloatingPoint` 协议的增强提案,核心目标是为浮点数比较提供一组语义严谨、开箱即用的近似相等 API:`i

gitblog_00324的博客 1034

别让AI编程助手再翻车:一套完整的Harness工程方案

把真实仓库交给 AI 编程助手时,它经常在最后关头掉链子:漏掉一步、弄坏测试,还信心满满地宣布"已完成",一运行发现什么都不对。翻车的根源往往不在模型聪明与否,而在于它所处的的工作环境。开源课程 [Learn Harness Engineering](https://link.gitcode.com/i/340c2f6a75d24a3585b1c14c7ab37d48) 就是冲着这个问题来的:教你

gitblog_00979的博客 65

Swift 泛型数学函数协议设计全解析:SE-0246 的 ElementaryFunctions 与 Real 协议

SE-0246「Generic Math(s) Functions」是 Swift Evolution 流程中一份极具代表性的提案:它为 Swift 标准库设计了一套面向泛型编程的初等数学函数协议,试图终结 C 数学库函数在 Swift 中"按平台 import、按具体类型重载、无法泛型调用"的尴尬局面。本文以 [proposals/0246-mathable.md](https://link.g

gitblog_01162的博客 771

C标准库数学计算与文件操作深度解析:从math.h到io.h的实战指南

在C语言编程中,标准库函数是连接应用程序与操作系统底层功能的核心桥梁,其设计哲学深刻影响着代码的性能与健壮性。理解其原理,首先要掌握浮点数处理与错误检测机制,这直接关系到数值计算的精度与稳定性。现代C库通过fpclassify等分类宏进行高效错误检查,替代了传统的errno方式,提升了多线程环境下的安全性。在文件系统交互层面,目录遍历与二进制文件处理是系统编程的常见需求,涉及平台相关的API调用与可移植性设计。这些技术共同支撑了高性能数值计算核心与高效系统工具的构建。本文聚焦于math.h数学函数库的浮点数

weixin_34364071的博客 298

Minkowski距离p值调优实战:从空间直觉到高维稀疏数据优化

Minkowski距离是度量学习与相似性计算的基础范式,其核心参数p控制着距离函数对特征差异的敏感模式——p=1对应曼哈顿距离,强调各维度线性累加;p=2即欧氏距离,刻画整体几何偏离;p→∞收敛为切比雪夫距离,体现‘最大单维主导’逻辑。该原理直接决定k-NN、聚类与异常检测在高维稀疏数据(如TF-IDF文本向量、用户行为序列)中的鲁棒性。实践中,p值本质是模型对数据空间结构的信任声明:低p增强抗噪性与稀疏适应力,高p强化关键特征判别力。本文聚焦真实工程场景,解析p值如何重塑决策边界、为何必须与标准化协同、以

weixin_34396103的博客 307

Rust RFC 2476 解读:Clippy 1.0 的 lint 分类体系与稳定性路线

> 本文基于本仓库中的 [RFC 2476 原文](https://link.gitcode.com/i/8023a5489cb367cb6af5033b394b341b) 展开,结合仓库内 [RFC 2103(工具属性与工具 lint 命名空间)](https://link.gitcode.com/i/06976d7fac045875e7a25408cc763a77)、[RFC 1270(弃用属

gitblog_00926的博客 631

IIR滤波器从原理到STM32实现:SOS矩阵与直接I型实战指南

数字信号处理中,滤波器的选择直接影响系统的性能与资源开销。IIR滤波器凭借反馈结构,能以更低阶数实现陡峭的过渡带,在嵌入式场景中尤其擅长以极小计算量和内存占用换取高效滤波。其核心原理在于输出不仅取决于当前输入,还依赖历史输出,这种递归特性既带来了效率优势,也引入了稳定性与数值精度挑战。工程实现上,SOS矩阵(二阶节级联)与直接I型结构是两种最常用的方案,前者数值稳健,后者直观易调试。在STM32等资源受限的MCU上,合理选用IIR并配合CMSIS-DSP库,可显著降低CPU负载。本文从滤波器基础概念出发,剖

weixin_30256901的博客 342
上一篇: 将txt文本格式存储的词id表示的数据集存为matlab中的sparse格式
下一篇: 在Java中使用Lambda表达式统计词频
Subson
博客等级 码龄12年 31粉丝 21原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值