JAVA中令人眼花撩乱的数字魔法

五月的深圳空气中弥漫起初夏的味道,淡淡的,暖暖的。春日里不太张扬的阳光也掺入这股气息…(烟哥好文采!)
这天,我愉快的喝着霸气芝士莓莓莓。一边东张西望,寻找着可以装13的机会。一切正如下面这张图这样

13894260-47bcb916eb97be58.png
QQ截图20190625170052.png

这时,小刘出现了!没错,就是那个大家期待的小刘出现了!她拿着一本《XXXjava笔试指南》来找我。
只见小刘娴熟的打开这本书,望着整本书满满的笔记,我不禁猜测道:"小刘如此热衷于学习,一定还是单身。"想到这里,我不禁更有回答的动力了(没错,我就是这种人!)。

缓存问题

小刘翻到某一页后,指出下面这样一道题

public static void main(String[] args){ Integer a = 50; Integer b = 50; Integer c = 150; Integer d = 150; System.out.println(a==b); System.out.println(c==d);}

输出结果为

truefalse

然后询问我具体缘由。
我看完以后,内心正(wei)直(suo)的笑了笑,心里想道:"这不是几年前的老题目了么,怎么现在还在考!"
我回答道:"其实很简单,原理是下面这样滴!"
JAVA编译器编译Integer a = 50的时候,被翻译成Integer a = Integer.valueOf(50);

valueOf的源码是下面这样的

13894260-7ab66fab6708a754.png
QQ截图20190625165948.png

看到了嘛,Integer内部有一个IntegerCache缓存。对于值范围在-128到127之间的数,会进行缓存。因此a和b范围在-128到127之间,所以指向的是同一个对象,所以判断结果是true。而c和d在128之外,所以每次都是返回一个新对象,所以判断结果是false
听到这里,小刘似乎很满意的准备打道回府。
"不行,怎么能这样让小刘离开。我得多和小刘说说话!"
于是,我说道:"小刘啊,其实java笔试里关于数值方面的陷阱,可以玩出很多花样,你了解多少?"
很自然的,小刘的表情是下面这样的

越界问题

我说道:"这样吧,先问你一个问题。Math.abs(Integer.MIN_VALUE))的结果是正数还是负数?"
小刘:"Math.abs是绝对值运算,结果应该是正数吧。"
我:"不对,还是负数。Integer的范围为-2147483648~2147483647。不过我们先来看一眼abs函数的源码,如下所示"

public static int abs(int a) {    return (a < 0) ? -a : a;}

我:"看了源码,其实很明显,绝对值运算的原理是判断这个数是否大于零,如果小于零则取负值。OK,回到我们题目。"

Integer.MIN_VALUE,它的十六进制表示是 0x80000000。其符号位为1,其余所有的位都是0。取负数(反码+1)则为 0x7fffffff+1,也就是 0x80000000。你会发现对Integer.MIN_VALUE取负值还是本身。因此,结果还是负数。

小刘:"那你这套理论对LongShortByte都成立么?"
我:"是的,都是成立的,原理都一样。你可以回去测试一下如下代码"

Short num =(short)Math.abs(Short.MIN_VALUE));System.out.println(num);

小刘望着这些代码,陷入了思考…
突然,小刘回答道:"好像,之前我有看到一个题目是这样的。是否存在一个数i,可以使其满足i+1<i,这样看来,这个i就是Integer.MAX_VALUE,因为加完1就溢出了变为负值了。"
听小刘说道这里,我换了一个角度问:"是否存在一个数,满足i != 0 && i == -i"
小刘想了下,机智的回答道:"其实还是Integer.MIN_VALUE,原因你刚才说过了!"
唉,没想到小刘领悟如此的快!

浮点奥秘

我感慨小刘领悟速度的同时,加大难度问道:"是否存在一个数,满足i==i+1?"
小刘突然懵了,答道:"好像..似乎..应该一个数永远不会等于自己加一。"
看见小刘懵圈的眼神,我只见自己装13的目的已经达到,便不再卖关子…
烟哥回答道:"有没听过一句话,无穷大加一个常数还是无穷大!所以,下面的例子输出为true"

double i = Double.POSITIVE_INFINITY;System.out.println(i == i+1);

小刘反怼我,说道:"其实,无穷大减去一个常数也是无穷大。所以下面例子也是输出为true,而且无穷小也有类似的特性。"

double i = Double.POSITIVE_INFINITY;System.out.println(i == i-1);

我满意的点了点头,感慨小刘成长真快!
突然,灵光一闪,我补充道:"你知不知道有一个数可以满足i!=i?"
小刘再次陷入了深思…嘴里嘟囔道:"奇怪,还有一个数可以自己不等于自己么?"
望着小刘愁眉苦脸的眼神 ,我答道:"对,有一个不是数值的值,它就是NaN,翻译过来就是(Not a Number),因此下面的输出是为true!"

double i = Double.NaN;System.out.println(i != i);

结局

在我一阵装13后,决定暴露自己的本性。问道:"小刘,你有对象了么?"
小刘答道:"你是个好人,然而我已经有对象了!"
"Boom!"

数据集介绍:野生动物与家畜多目标检测数据集 数据集名称:野生动物与家畜多目标检测数据集 数据规模: - 训练集:1,540张图片 - 验证集:377张图片 - 测试集:316张图片 分类类别: Brown-bear(棕熊)、Chicken(鸡)、Fox(狐狸)、Hedgehog(刺猬)、Horse(马)、Mouse(老鼠)、Sheep(绵羊)、Snake(蛇)、Turtle(龟)、Rabbit(兔)及通用object(物体)共11个类别 标注格式: YOLO格式标注,包含归一化坐标与类别索引,支持目标检测模型训练 数据特性: 涵盖航拍与地面视角,包含动物个体及群体场景,适用于复杂环境下的多目标识别 农业智能化管理: 通过检测家畜(鸡/马/绵羊等)数量及活动状态,辅助畜牧场自动化管理 生态监测系统: 支持野生动物(棕熊/狐狸/刺猬等)识别与追踪,用于自然保护区生物多样性研究 智能安防应用: 检测农场周边危险动物(蛇/狐狸),构建入侵预警系统 动物行为研究: 提供多物种共存场景数据,支持动物群体交互行为分析 高实用性标注体系: - 精细标注包含动物完整轮廓的边界框 - 特别区分野生动物与家畜类别,支持跨场景迁移学习 多维度覆盖: - 包含昼间/复杂背景/遮挡场景 - 涵盖陆地常见中小型动物与禽类 - 提供通用object类别适配扩展需求 工程适配性强: - 原生YOLO格式适配主流检测框架(YOLOv5/v7/v8等) - 验证集与测试集比例科学,支持可靠模型评估 生态价值突出: - 同步覆盖濒危物种(龟类)与常见物种 - 支持生物多样性保护与农业生产的双重应用场景
内容概要:本文档详细介绍了Python实现TSO-ELM(金枪鱼群优化算法优化极限学习机)多输入单输出回归预测的项目实例。极限学习机(ELM)作为一种快速训练的前馈神经网络算法,虽然具有训练速度快、计算简单等优点,但也存在局部最优解和参数敏感性的问题。金枪鱼群优化算法(TSO)通过模拟金枪鱼群体觅食行为,具有较强的全局搜索能力。将TSO与ELM结合形成的TSO-ELM模型,可以优化ELM的输入层和隐藏层之间的权重,提高回归预测的准确性。项目包括数据预处理、TSO优化、ELM回归模型训练和预测输出四个主要步骤,并提供了详细的代码示例。; 适合人群:对机器学习、优化算法有一定了解的数据科学家、算法工程师和研究人员,特别是那些希望深入理解智能优化算法在回归预测任务中的应用的人群。; 使用场景及目标:① 提升ELM在多输入单输出回归预测中的性能,特别是在处理非线性问题时的预测精度;② 解决ELM中的局部最优解和参数敏感性问题;③ 优化ELM的隐层权重和偏置值,提高模型的表达能力和预测能力;④ 在金融、气象、能源、医疗、交通等领域提供更准确的预测模型。; 阅读建议:本文档不仅提供了理论解释,还包含详细的代码实现,建议读者在阅读过程中结合代码进行实践,理解TSO-ELM模型的工作原理,并尝试调整参数以优化预测效果。同时,读者应关注TSO算法在高维复杂问题中的应用挑战,思考如何改进优化策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值