·
收录于
『踩坑记录』
当前文章被收录于:
『踩坑记录』
15
篇文章
1
人学习
订阅专栏
查看详情
当前文章被以下社区和专栏收录:
标签
#浮点数的比较
#abs和fabs
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
Python绝对值abs()深度解析:类型、协议与生产安全指南
绝对值是基础数学概念,但在Python中远不止`abs()`函数那么简单。它本质是数值协议(Numeric Protocol)的入口,通过`__abs__()`魔术方法实现鸭子类型支持,可作用于整数、浮点数、复数、NumPy数组、Pandas序列乃至自定义类。其行为由底层数据类型决定:整数依赖补码位运算,浮点数遵循IEEE 754符号位清除,复数调用`hypot()`保障数值稳定性,而NumPy版本则通过SIMD向量化实现百万级高效计算。理解`abs()`与`math.fabs()`、`numpy.abso
阅读详情
相关推荐
IEEE 754浮点数与十六进制转换:原理、代码实现与避坑指南
在计算机底层开发中,数据表示与转换是核心基础。浮点数作为近似表示实数的标准方式,其底层遵循IEEE 754标准,通过符号位、指数位和尾数位的二进制组合,实现了在有限存储空间内对宽范围数值的编码。理解其内存布局和数学原理,是进行跨平台数据交换、协议分析和嵌入式调试的关键技术基础。这一原理在工程实践中价值显著,尤其在处理传感器数据、通信协议或进行逆向工程时,开发者必须能够准确地在人类可读的十进制浮点数与机器存储的十六进制字节序列间进行转换。这涉及到对字节序(大小端)、非规格化数及特殊值(如NaN、Infinit
weixin_34161083的博客
390
浮点数的比较以及abs和fabs的区别
我们知道有的小数可能小数点后有很多为,比如无限循环小数、无限不循环小数,而计算机中的float和double能够表示的小数范围是有限的,因此浮点数在计算机中的存储是不精确的。使用abs求浮点数的绝对值是有问题的,使用fabs求整数的绝对值也是有问题的,所以在C语言中求浮点数的时候一定要选对函数。在C++中,abs和fabs都是用来计算数值的绝对值的函数,但它们之间存在一些重要的区别。fabs:对于浮点数,精度取决于具体的实现和平台,但通常足够用于大多数的数值计算。abs:通常用于计算整数的绝对值。
宁静致远的博客
8314
GoogleTest浮点比较:EXPECT_FLOAT_EQ与EXPECT_DOUBLE_EQ原理与实战
在计算机科学中,浮点数运算因IEEE 754标准的二进制表示特性而存在固有精度限制,直接使用等值比较常导致结果不稳定。理解浮点误差原理是构建可靠单元测试的基础,其技术价值在于确保数值计算程序在科学计算、图形处理等场景下的正确性与可重复性。GoogleTest框架为此提供了专门的近似比较断言,通过ULP(最小精度单位)与绝对容差的混合策略,平衡了误差容忍与缺陷检测。本文聚焦于EXPECT_FLOAT_EQ和EXPECT_DOUBLE_EQ这两个核心断言,解析其默认4 ULP容差机制及处理舍入误差、大数吃小数等
weixin_30650039的博客
404
abs 与 fabs 区别
abs和fabs都是表示求取绝对值。
abs定义在stdlib.h头文件中。fabs定义在cmath头文件中。
但是abs是表示对整数求取绝对值。fabs是对精度较高的浮点数比如:float或者double型数据求取绝对值。
在浮点数和“零”进行比较的过程中,不能用“==”来判断是否为0,可以用:
if( fabs(num)
这种方式的比较来判断是否
行路者
4587
C51嵌入式开发:高效分离浮点数整数与小数部分的原理与实现
在嵌入式系统开发中,浮点数处理是基础且关键的技术环节,尤其在资源受限的8位MCU(如8051)上。其核心原理涉及数据的二进制表示、内存布局及类型转换机制。通过理解浮点数在内存中的IEEE 754格式,开发者可以绕过标准库函数的开销,直接操作数据位或利用强制类型转换的截断特性,实现高效、可控的数值分离。这一技术对于提升系统实时性、减少代码体积具有重要价值,广泛应用于传感器数据处理、人机界面显示、通信协议封装等场景。本文聚焦于C51平台,深入探讨了两种分离浮点数整数与小数部分的经典方法,并详细解析了其中涉及的*
weixin_30723433的博客
363
abs()和fabs()的区别?
abs() 方法在C++语言中,只对double、float、long double类型生效,不支持int类型,作用是求数据的绝对值。从C++11开始,增加了对int整型数据类型的支持。abs() 方法在C语言中,只对int整型生效,作用是求整型数据的绝对值。这篇文章我来讲一下绝对值函数。
我写写哈的博客
910
Python abs()函数深度解析:原理、性能与工业级实战
绝对值是基础数学概念,也是编程中高频使用的运算操作,其本质是剥离方向性、保留大小的度量工具。在Python中,abs()并非简单符号翻转,而是基于类型分发机制的多态接口:对整数执行补码位操作,对浮点数直接清除IEEE 754符号位,对复数计算欧几里得模长,并支持通过__abs__协议扩展至任意对象。这种设计赋予它跨类型一致性与工程灵活性,使其广泛应用于传感器数据清洗、金融波动计算、物理引擎碰撞检测等场景。理解abs()与math.fabs()的性能差异、NumPy向量化优化边界,以及自定义类重载实践,是构建
weixin_30598225的博客
417
【C语言学习疑难杂症】第19期:fabs和abs的用法,以及注意事项
比如要计算一个浮点数的绝对值,误用了abs函数,由于浮点数作为参数传递给abs,而abs的参数是一个int类型,就会造成浮点数小数点后的值的丢失,并且返回值也是一个整数,自然得到的结果也就错了。fabs和abs是两个不同的函数,用于计算数值的绝对值。分享C语言阶段一些容易被大部分同学忽略的重点、难点知识,帮助C语言知识学习的拔高。分享C语言阶段一些容易被大部分同学忽略的重点、难点知识,帮助C语言知识学习的拔高。通过上面的描述,我们也可以比较容易的知道,如果两个函数用错了,就会容易出错。
学无止境
1751
浮点数、进制、重定义(代码经验记录4)
C、C++
m0_47065396的博客
202
告别‘Duang’的一声:手把手解决RK3588开发板PCIe初始化卡死问题(DTS修改实战)
本文详细介绍了解决RK3588开发板PCIe初始化卡死问题的完整过程,包括问题诊断、DTS文件修改及编译烧写步骤。通过禁用未使用的PCIe硬件资源,有效解决了启动卡死问题,为嵌入式开发者提供了实用的调试方法和经验总结。
weixin_30753873的博客
210
华为2024机考真题集合
2.中位数是指把一组数据从小到大排列,最中间的那个数,如果这组数据的个数是奇数,那最中间那个就是中位数,如果这组数据的个数为偶数,那就把中间的两个数之和除以 2,所得的结果就是中位数。在实际考试中会随机抽三道题目进行考察,其中两道100分卷题和一道200分卷题,总共400分。幼儿园组织活动,老师布置了一个任务:每个小朋友去了解与自己同一个小区的小朋友还有几个。3.查找整型数组中元素的众数并组成一个新的数组,求新数组的中位数。1.众数是指一组数据中出现次数量多的那个数,众数可以是多个。
qq_25360769的博客
5066
蚂蚁搬大象DAY1
摘要:文章记录了编程学习中的代码调试过程,通过三个具体案例展示了常见错误及AI修正方案。主要问题包括:1)使用abs()而非fabs()导致精度丢失;2)浮点数pow()函数在整数运算中引发精度问题;3)类型转换时机不当造成计算溢出。关键收获:整数运算需避免浮点函数,提前转换数据类型,注意运算顺序对精度的影响。文中穿插学习感悟,体现从"最后统一转换"到"提前转换"的认知升级,并以音乐《花田错》作为编程背景的趣味记录。
Hylllll_Hbsssss的博客
424
Chapter 4 Ripple-Based Control Technique Part I
本文介绍了DC-DC转换器的纹波控制技术,重点分析了迟滞控制、恒定开通时间控制、恒定关断时间控制等方案的工作原理及优缺点。纹波控制无需补偿网络,具有快速瞬态响应和结构简单的优势,特别适合电池供电应用。其中,恒定开通时间控制在轻载时能自动延长关断时间,实现伪定频工作;而恒定关断时间控制轻载效率较低。文章还讨论了纹波注入技术解决Boost转换器右半平面零点问题,并比较了不同控制方案在负载瞬态下的性能表现。最后指出基于纹波的控制技术在提高调节精度和降低EMI方面的改进方向。
2304_76736886的博客
1291
algorithm头文件下的常用函数
来自胡凡的《算法笔记》
lilian的博客
243
(MATLAB)一维信号峰值检测findpeaks
一维信号波峰波谷检测,峰值、峰宽、到达时间计算。MATLAB自带的findpeaks函数能完成这一任务,在这里分享其基本用法与特殊用法。
HPC_ZY
2万+
中台战略-第五章、中台建设方法论
文章目录第五章、中台建设方法论5.1 中台架构整体策略5.2 业务顶层设计5.3 业务中台设计方法论5.3.1 能力支撑是基础5.3.2 中心自治是承载形式5.3.3 3层模型是骨架5.3.4 5步法是指导思想1. 业务抽象2. 高阶设计3. 组件建模4. 开发交付5. 持续运营5.4 数据中台设计方法论5.4.1 总体规划5.4.2 数据集成5.4.3 模型建设5.4.4 通用研发5.4.5 资产管理5.4.6 数据服务5.5 应用向中台迁移的3中途径和方法5.5.1 方法1:新应用替换旧应用5.5.2
沧海之巅的专栏
1448
二分刷题记录
问题一:
数的范围
走这
问题分析:
二分模板题,不够我试图用字符串解,然后发现字符串一位表示一位数字,而输入数据可能有两位以上的数字,于是字符串解题是不可行的
AC代码:
#include
#include
using namespace std;
#define N 100010
int nums[N];
int main()
{//不能用string写,因为当数字是两位以上时,在数组占一位,而字符串两位以上
int n,q;
c
sky666tzz的博客
165
29、集成电路测试技术解析
本文深入解析了集成电路测试技术,涵盖定制电路测试资源与策略、混合模拟/数字电路测试方法、数字测试模式生成难点与解决方案,以及可控性和可观测性的核心概念。同时详细讨论了固定故障、桥接故障和开路故障等主要故障模型及其检测方法。在测试技术的综合应用与优化方面,提出了合理配置测试资源、优化测试模式和设计测试流程的策略。最后展望了测试技术的发展趋势,包括集成化测试、自动化测试和智能化测试。通过全面掌握这些测试技术,可以有效提高集成电路的质量和可靠性,推动集成电路产业的发展。
work3的博客
197
Python基础学习Day_02
实在不行了,太困了,现在时间是00:21,明天还要上班,狗命要紧,赶紧睡觉,今天也是要做python大神的一天,兄弟们,mai起!
wuliwavv的博客
1026
(王道408考研数据结构)第一章绪论-第二节1:算法的基本概念、算法的特性及设计要求
算法(Algorithm):是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作王道视频课中讲到了一个例子,展示了算法就是解决问题的特定步骤的描述对于给定的问题可以有多种多样的算法来解决,只不过这些算法有各自的优点和缺点。
快乐江湖的博客
2669
图机器学习(2)——图的可视化
图结构可通过图形化方式直观呈现。节点通常用圆形表示,边则用连接线表示。然而当节点和边数量增加时,绘制清晰的图形表示可能会变得相当困难,这主要源于节点在二维坐标系中的布局问题。对于包含数百个节点的图,手动指定每个节点的坐标显然不切实际。在本节中,我们将介绍如何在不指定每个节点坐标的情况下绘制图形。我们将利用两种不同的解决方案:networkx 和 Gephi。
盼小辉丶的博客
8376
记录下我曾经犯过的错误,时刻提醒着自己(也包括一些小技巧,未完,待续……)
1. 变量不要在重复定义,除非另一个定义在调用函数里。
2. 要注意题上给的范围,测试一下特殊情况,比如大数据,小数据。比如好多题要考虑有关0的情况
3. 涉及到长整形的时候要注意是否还有一些中间变量也会是长整型,不要错误的定义成整型。
勿忘初心
1319
精雕软件(JDpaint) 5.5 绿色版
精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版
C++算法竞赛入门:模拟法核心思想、分类与实战避坑指南
在算法设计与编程竞赛中,模拟法是一种基础且强大的问题求解策略。其核心原理是将现实世界或抽象问题的运行过程,通过代码指令精确地复现出来。这种方法的技术价值在于,它不依赖于高深的数学模型,而是直接训练程序员的代码实现能力、逻辑严谨性和边界条件处理思维,是构建扎实编程基础的必经之路。模拟法广泛应用于游戏开发、物理系统仿真、排队模型、自动化脚本等场景。本文聚焦于信息学奥赛(NOI)和C++算法学习,深入剖析模拟法的两大类型:直接过程模拟和离散事件模拟,并通过经典例题详解其实现技巧与常见“坑点”,如整数溢出、边界条件
weixin_33736832的博客
412
jdk-8u144-linux-x64.tar.gz.
该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
C语言学习记录(学校上课版)
书:C程序设计基础 浙江科学技术出版社
第二章——基本数据类型与常用库函数:
转移字符表和ASCII表大致要知道,要考
对于字符,单引号内表示单个字符,如:‘a’,双引号表示字符串,如“a”,格外注意,单个字符也可作为字符串,因为里面默认有个/0的存在
1个字节包含8个位
char类型占8个位,short占16位,int、long占32位,它们前面加unsigned并不改变数据长度,只是数值范围没了负数
整型数据的数值范围需要掌握,包含科学计数法版本和精确数字版本,除了unsigned long的精确数字
m0_49453728的博客
290
深度学习工具包 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")
C/C++笔试必须熟悉掌握的头文件系列(二)——math.h/cmath
“math.h”是C语言中数学函数库,包含我们常用的一些数学计算上会使用到的函数。C++中有对应相同作用的头文件“cmath”,当然C++中两个头文件都可以使用,C++向C兼容。2. 面试必掌握的内容 关于数学函数的内容有很多,需要注意使用的地方就是,输入参数绝大多数要求的是double双浮点类型。
无鞋童鞋的博客
1万+
数值计算的C语言实践:浮点精度、内存布局与工程化实现
数值计算不是纯数学推导,而是数学逻辑在计算机硬件约束下的工程实现。理解IEEE 754浮点标准是掌握误差来源的基础,而C语言的内存模型(如数组连续存储、指针算术、malloc行为)直接决定算法稳定性与性能。浮点精度陷阱(如0.1+0.2≠0.3)、相对误差判据设计、缓存友好的矩阵分块、BLAS调用等,均源于对C语言底层行为的准确建模。这些能力支撑着科学计算、嵌入式仿真、金融建模等高可靠性场景。本文聚焦C语言描述下的数值方法落地关键——从二分法收敛判据到矩阵乘法优化,覆盖浮点数行为直觉、内存布局感知和数学表达
weixin_34056162的博客
413
上一篇:
『网络』浅谈TCP协议
下一篇:
『Others』IntelliJIDEA 2019安装及配置