Java面试官:兄弟,你确定double精度比float低吗?

double 的精度和,有效位数和表示范围 曾经的一道题目中,用dou 阅读详情

我有一个朋友,叫老刘,戴着度数比我还高的近视镜,显得格外的“程序员”;穿着也非常“不拘一格”,上半身是衬衣西服,下半身是牛仔裤运动鞋。

我和老刘的感情非常好,每周末我们都要在一起吃顿饭。这周,我们吃的是洛阳有名的吴家刀削面,席间他聊了一件蛮有趣的面试经历;我听得津津有味。

散席的时候,老刘特意叮嘱我把他和面试者的对话整理一下发出来,因为他觉得这段对话非常的精彩,值得推荐给更多初学Java的年轻人。

注:以下是老刘和面试者东丰的真实对话。如有雷同,请勿对号入座。

老刘:“东丰,你长期从事金融软件的开发,记录存款和金额之类的有关数据用哪种数据类型啊?”

东丰:“当然用float啊,精确度比double高嘛。”

老刘:“东丰,你确定double精度比float低吗?”

东丰:“那当然啊,double只精确到小数点后两位,double这个单词的意思不就是二的意思吗?”

老刘:“东丰,你右手边刚好有一本《Java核心技术卷1》,你翻到第35页,看一下。”

东丰:“…哦,刘经理,不用了。不好意思,刚刚开个玩笑,为了缓和一下面试的紧张气氛。看您厚厚的眼镜片下藏着一双深邃的眼睛,我觉得您一定大有学问。在金融计算中,必须要使用BigDecimal,double和float都不适合。因为单单一个精度问题就能把人整晕了。”

“我记得有一次,我碰巧要计算一个表达式a - b,a的值为2,b的值为1.1,我侄女五岁半都知道答案应该是0.9,结果程序算出来的结果竟然是0.89999…,我当时又气又激动,气的是计算机还没有我侄女靠谱,激动的是我竟然第一次找到了Java的bug。”

“我赶紧把这个bug反馈到了沉默王二的青铜时代群,以为我要被大家点赞表扬了。结果收到了大佬们一致的无情的嘲笑!”

“好在,群主二哥及时地安慰了我。他发我私信说:‘首先,计算机进行的是二进制运算,我们输入的十进制数字会先转换成二进制,进行运算后再转换为十进制输出。double和float提供了快速的运算,然而问题在于转换为二进制的时候,有些数字不能完全转换,只能无限接近于原本的值,这就导致了你看到的不正确的结果。’”

“看到二哥的信息后,我沮丧的心情得到了很大的安慰。我于是就对使用浮点数和小数中的问题进行了深入地研究。”

“BigDecimal可以表示任意精度的小数,并对它们进行计算。但要小心使用 BigDecimal(double) 构造函数,因为它会在计算的过程中产生舍入误差。最好要使用基于整数或 String 的构造函数来创建BigDecimal对象。”

老刘:“哇,你回答得很好。那我们来看下一个问题。你应该知道2 / 0的时候程序会报java.lang.ArithmeticException的错误,那么你知道2.0 / 0的结果吗?”

东丰:“刘经理,您这个问题难不倒我。结果是Infinity(英菲尼迪),不好意思,我的英语口语能力有限啊。其实就是无穷的意思。不仅有正无穷大,还有负无穷大,甚至还有一个叫做NaN的特殊值。NaN代表‘不是一个数字’。这些值的存在是为了在出现错误条件时,程序还可以用特定的值来表示所产生的结果。这些错误的情况包括算术溢出、给负数开平方根,还有您说的除以 0 等。”

老刘:“东丰啊,你的发音比我好啊,挺准确的。”

东丰:“刘经理您见笑了。”

老刘:“我这还有一道关于数组的问题,你稍等一下,我在纸上写一下。”

int[] a = {1, 2, 3, 4}
int[] b = {2, 4}
int[] c = {1, 3}
int[] d = {2}
1
2
3
4
“有这样四个数组,要求每个数组只留一个唯一的元素。也就是说,a、b、c、d四个数组之间的元素不能相同,你打算怎么做呢?”

东丰:“刘经理,我能用一下您的凌美钢笔吗?”

老刘:“可以啊,你请用。”

东丰:“我大致演算了一下。说一下我的思路。d只能是2,b只能是4,a是1或者3,c是3或者1。遍历长数组,剔除长数组中含有的最短数组的元素。b中剔除d中的2还剩下4,a中剔除d中的2还剩下1、3、4,c中不含d中元素,所以不用剔除。剔除后b中还剩下一个4,d中是一个2。再次遍历剔除a中的4。最后a和c中只剩下1和3了,再分别剔除互异的数就行了。”

“我觉得比较笨的作法,刘经理您觉得可行吗?”

老刘:“可行,没有问题。那,你对变量和方法的命名有什么看法呢?请随意发挥啊。”

东丰:“我在博客园上曾看到一个有意思的投票统计——选出平常工作时自己认为最难的事情,选项大致有:”

写各种文档
与客户沟通
预估工作量
给变量命名
“投票结果完全出乎我的意料,排在第一的竟然是‘给变量命名’!变量命名实在是软件开发中最常见的一件事了,但这件事要想做好,还真是不容易啊。”

“阿里巴巴Java开发手册中「强制」规定,方法名、参数名、成员变量、局部变量要统一使用lowerCamelCase风格,必须遵从驼峰形式。”

localValue // 变量
getHttpMessage() // 方法
1
2
“有很长一段时间,我总是在纠结究竟是用拼音好还是用英语单词好的问题。后来我下定了决心:要么用拼音要么用英语单词,只要看到名字就能知道这个变量或者方法的用意就行了。”

“有时候,确实很难给变量取一个好名字。这时候,我就会选择一种省时省力省心的做法——将变量名命名为类型名。比如说:”

Map map;
List list;
1
2
“最好,变量声明的地方要离第一次使用的地方近。否则的话,代码阅读起来会很困难,因为人眼睛接受的屏幕高度是有限的。”

老刘:“东丰啊,你非常的优秀。恭喜你,你的面试过了。你回去准备一下,下周一就可以来上班了。”

再注:以上是老刘和面试者东丰的真实对话。如有雷同,请勿对号入座。
--------------------- 
作者:沉默王二 
来源:优快云 
原文:https://blog.youkuaiyun.com/qing_gee/article/details/88923634 
版权声明:本文为博主原创文章,转载请附上博文链接!

极智AI | 谈谈为什么卷积加速更喜欢 NHWC Layout 本文主要讨论一下为什么卷积加速更加喜欢 NHWC 的数据排布。 阅读详情

相关推荐

解决方案:“Project1.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。无法查找或打开 PDB 文件。

解决方案:“Project1.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。无法查找或打开 PDB 文件。 添加getchar();代码块解决无法查找或打开PDB文件。 错误提示: “Project1.exe”(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。 “Pro...

m0_46523403的博客 6416

double的精度与范围

float与double的范围和精度 1. 范围   float和double的范围是由指数的位数来决定的。   float的指数位有8位,而double的指数位有11位,分布如下:   float:   1bit(符号位) 8bits(指数位) 23bits(尾数位)   double:   1bit(符号位) 11bits(指数位) 52bits(尾数位)   于是,flo

一码算一码 5万+

Miniforge3部署教程,完美替代Anaconda3

大背景不介绍了,哎!直接上教程!

zzy_ucas的博客 1万+

double和float的精度和取值范围

(1)占用字节不同 float占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38。 double占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308。 (2) float只能提供七位有效数字。 double可提供16位有效数字。 float的范围 2^-128到 2^127 ...

liyang_nash的专栏 4万+

Keil AC6编译器独立安装与配置指南:不升级Keil MDK也能用上新工具链

本文详细介绍了如何在不升级Keil MDK的情况下独立安装和配置Arm Compiler 6(AC6),帮助嵌入式开发者充分利用AC6的编译速度、代码密度和现代语言支持优势。通过零侵入式解决方案,开发者可以在现有环境中灵活切换编译器版本,提升开发效率。

weixin_30872157的博客 552

【C语言基础】野指针与空指针

全网最接地气的C语言野指针介绍,此处对于野指针与空指针知识点做一些简要的介绍,作者实属初学,写博客也是作者学习的一个过程,难免文章中有内容理解不到位或者有不当之处,还请朋友们不吝指正,希望大家多多给予支持,赠人玫瑰,手有余香! 文章目录一:野指针1.1 :野指针的成因2.1 :规避野指针二:空指针 一:野指针 概念:野指针就是指向的内存地址是未知的(随机的,不正确的,没有明确限制的)。 说明:指针变量也是变量,是变量就可以任意赋值。但是,任意数值赋值给指针变量没有意义,因为这样的指针就成了野指针,此指针指向

qq_43727529的博客 2万+

double和float的区别

1.double是双精度浮点数,内存占8个字节,有效数字16位,表示范围是-1.79E+ 308~-1.79E+308。 float是单精度浮点数,内存占4个字节,有效数字8位,表示范围是 -3.40E+38~3.40E+38。 2.两者处理速度不同,CPU处理float的速度比处理double快。double的精度高,double消耗内存是float的两倍。 3.如果不声明,小数默认是double类型,用float时需要进行强转,或者在小数后加上f。 /** * @author dou_chengzi

weixin_44167611的博客 4万+

HFSS实战:手把手教你设计一款小型化圆极化微带天线(附仿真文件)

本文详细介绍了使用HFSS设计小型化圆极化微带天线的完整流程,包括工程初始化、辐射贴片设计、仿真设置与优化等关键步骤。通过实战案例,帮助工程师掌握圆极化天线设计技巧,解决轴比控制和耦合馈电匹配等核心问题,适用于物联网终端和便携式设备应用。

weixin_32770423的博客 338

double类型精度丢失问题以及解决方法

口算结果是0.01。可是用程序执行出来的结果却出乎意料,执行结果为0.009999999999999787。然后把15280.000000000002 - 15280 = 1.8189894035458565E-12这个结果返回给了前端,前端拿去和0比较, 结果就炸了原因:就是double的精度问题, 单个double数可能就有损失精度,,多个double数运算(减法和乘法都输入加法)可能导致损失的精度更多。。。

UrasakiNakajima的博客 3万+

YOLO11改进 - 卷积Conv | DEGConv(方向引导边缘门控卷积) : 空间分块、方向先验、轻量边缘增强

本文介绍了方向引导边缘门控卷积(DEGConv),一种专为增强边缘敏感度与方向感知能力设计的轻量级模块。该方法通过 Sobel 算子生成方向嵌入,结合条纹卷积提取水平与垂直边缘特征,并利用门控机制动态抑制背景噪声,从而精准捕捉细粒度结构。我们将 DEGConv 成功集成进 YOLO11,在 Backbone 的 SPPF 后及 Neck 的 P3、P4 分支中引入该模块以优化特征提取。实验证明,集成 DEGConv 的 YOLO11 在检测任务中表现优异,有效提升了模型对复杂边缘与方向特征的建模能力。

魔改工程师的博客 674

【异常】came as a complete surprise to me,IllegalArgumentException: The template string is not valid.

是Spring AI中用于生成提示词(prompt)的一个类。提示词对于与大语言模型交互至关重要,因为它们指导模型生成特定类型的响应。允许开发者创建包含占位符的模板字符串,并通过提供具体的值来填充这些占位符,从而动态地生成个性化的提示词。

奶爸的编程之路,也就一周冷个三天 746

float计算丢精度_Java面试官:兄弟,你确定double精度比float低吗?

我有一个朋友,叫老刘,戴着度数比我还高的近视镜,显得格外的“程序员”;穿着也非常“不拘一格”,上半身是衬衣西服,下半身是牛仔裤运动鞋。我和老刘的感情非常好,每周末我们都要在一起吃顿饭。这周,我们吃的是洛阳有名的吴家刀削面,席间他聊了一件蛮有趣的面试经历;我听得津津有味。散席的时候,老刘特意叮嘱我把他和面试者的对话整理一下发出来,因为他觉得这段对话非常的精彩,值得推荐给更多初学Java的年轻人。注:...

weixin_36138462的博客 89

数据挖掘实战-基于随机森林算法的交通事故预测模型

本实验数据集来源于Kaggle,原始数据集共有209306条,该数据集包含不同地区和时间段的交通事故详细信息。它包括各种指标,例如事故日期、天气状况、照明条件、碰撞类型、受伤人数和车辆参与情况。数据涵盖多个地点和事故类型,可全面了解交通事故及其原因。具体包括:crash_date:事故发生的日期。Traffic_control_device:所涉及的交通控制设备的类型(例如交通灯、标志)。weather_condition:事故发生时的天气状况。

m0_64336780的博客 1万+

c++ string转double_Java面试官:兄弟,你确定double精度比float低吗?

我有一个朋友,叫老刘,戴着度数比我还高的近视镜,显得格外的“程序员”;穿着也非常“不拘一格”,上半身是衬衣西服,下半身是牛仔裤运动鞋。我和老刘的感情非常好,每周末我们都要在一起吃顿饭。这周,我们吃的是洛阳有名的吴家刀削面,席间他聊了一件蛮有趣的面试经历;我听得津津有味。散席的时候,老刘特意叮嘱我把他和面试者的对话整理一下发出来,因为他觉得这段对话非常的精彩,值得推荐给更多初学Java的年轻人。注:...

weixin_39851307的博客 171

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: 使用idea开发工具如何让SpringBoot框架(SpringCloud框架)整合RabbitMQ
下一篇: SpringCloud跨域访问技术配置文件版
听风动
博客等级 码龄8年 63粉丝 90原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值