Java中关键词strictfp有什么作用?

news2025/5/22 10:38:03

在Java中,关键词strictfp用于声明一个方法、类或接口是严格遵守浮点数计算规范的。

具体作用包括:

  1. 保证浮点数计算的结果在不同平台上是一致的,避免由于浮点数计算的不精确性导致的结果不确定性。

  2. 指定了严格的浮点数计算规则,禁止使用与IEEE 754标准不兼容的浮点数计算方式,确保计算结果是可预测的。

  3. 限制了浮点数计算的精度和范围,提高计算性能,避免使用非严格模式下的复杂浮点数计算规则,导致计算速度变慢。

需要注意的是,strictfp关键词只能修饰方法、类或接口,不能修饰变量。在类或接口上使用strictfp关键词会影响到所有该类或接口中的方法,而在方法上使用strictfp关键词只会影响到该方法的浮点数计算。

下面我们来看一个案例:

public  strictfp   static void testStrictfp() {
        System.out.println(255555555f - 255555554f);
        System.out.println(25555555f - 25555554f);
        System.out.println(1.7 - 1.6);
        double a = 0.05;
        double b = 0.01;
        double sum =a+b;
        System.out.println(sum);
        //这样的结果如果是在银行或者其他商业计算中出现那么结果是不能想像的。所以有严格的浮点计算。JAVA对这样的计算是封装在BigDecimal类中的。
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~");
        //官方的例子:
        double d = 8e+307;
        System.out.println(4.0 * d * 0.5);
        System.out.println(2.0 * d);
        //Double.MAX_VALUE大概是1.8e+308
       
    }

    public static void main(String[] args) {
        testStrictfp();
    }

运行结果如下:


扩展指数范围
体会一下,也就是在某种情况下,数字的范围不一样。并不限定于32位float和64位double了。
上面的计算结果,可能就不是Infinity,而是1.6E308或其他值。
一旦使用了strictfp来声明一个类、接口或者方法时,
那么所声明的范围内Java的编译器以及运行环境会完全依照浮点规范IEEE-754来执行。

IEEE-754到底是个什么东东呢?
IEEE二进制浮点数算术标准(IEEE 754)是最广泛使用的浮点数运算标准,
为许多CPU与浮点运算器所采用。  http://zh.wikipedia.org/wiki/IEEE_754\
大致意思是:在一个FP-strict表达式中间的所有值必须是float或者double,
这意味着运算结果也肯定是IEEE754中所规定的单精度和双精度数,
也即是32位的float和64位的double。
这里也只说明了,float和double的规定,是符合IEEE754标准的。

1.strictfp翻译为“精确的浮点”不够贴切,容易引起误解。

2.strictfp关键字的使用与IEEE754没有直接因果关系。IEEE 754,是IEEE制定的,而不是J2EE标准:)

3.使用strictfp关键字的目的,是保证平台移植之后,浮点运算结果是一致的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1356306.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习基础】DBSCAN

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:机器学习 欢迎订阅!相对完整的机器学习基础教学! ⭐特别提醒:针对机器学习,特别开始专栏:机器学习python实战…

springboot实现用户操作日志记录

springboot实现用户操作日志记录 简介:之前写了《aop实现日志持久化记录》一文,主要介绍自定义aop标注方法上,通过切面方法对用户操作插入mysql。思路正确但是实际操作上存在一些小问题,本文将从项目出发,对细节进行补…

vue3+vant4 移动端软键盘弹出 收起导致项目样式布局错乱解决方案,亲测有效!!

问题描述 最近在做vue3 H5的移动端项目 我用的是vue3vant4,然后在使用过程中发现 小米14手机在点击密码输入框软键盘弹出 时会导致项目布局整体向上移动 导致页面布局错乱。 原因分析: 在移动端软键盘弹出收起时,导致项目样式布局错乱的原因…

内网DNS隐蔽隧道搭建之iodine工具

iodine iodine是基于C语言开发的,分为服务端和客户端。iodine支持转发模式和中继模式。其原理是:通过TAP虚拟网卡,在服务端建立一个局域网;在客户端,通过TAP建立一个虚拟网卡;两者通过DNS隧道连接&#xf…

前端开发加速器:十个VSCode插件精选

前端开发是一个不断发展的领域,随着技术的进步,工具也在不断更新。Visual Studio Code(VSCode)是前端开发者广泛使用的编辑器之一,得益于其强大的插件系统,可以帮助开发者提升工作效率。以下是十个对于前端…

任务需求分析中的流程图、用例图、er图、类图、时序图线段、图形的作用意义

任务需求分析中的流程图、用例图、er图、类图、时序图线段、图形的作用意义 流程图 流程图中各种图形的含义及用法解析 连接线符号 连接各要素,表示流程的顺序或过程的方向。 批注符号 批注或说明,也可以做条件叙述。 子流程 流程中一部分图形的逻辑…

程序员如何应对裁员-法律知识

目录 程序员如何应对裁员-法律知识 前言收到辞退消息后被要求主动离职可以赔偿多少呢裁员赔偿工资是指基本工资吗被强制接触劳动合同,也不愿意支付赔偿孕妇,公司让离职谈话之后,老板还是不愿意给补偿,我应该怎么办?离…

IO作业4.0

思维导图 创建出三个进程完成两个文件之间拷贝工作&#xff0c;子进程1拷贝前一半内容&#xff0c;子进程2拷贝后一半内容&#xff0c;父进程回收子进程的资源 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <myhead.h> int …

CCNP课程实验-07-OSPF-Trouble-Shooting

目录 实验条件网络拓朴 环境配置开始排错错点1&#xff1a;R1-R2之间认证不匹配错误2&#xff1a;hello包的时间配置不匹配错误3&#xff1a;R2的e0/1接口区域配置不正确错误4&#xff1a;R4的e0/1接口没有配置进OSPF错误5&#xff1a;R2的区域1没有配置成特殊区域错误6&#x…

ASP.NETCore WebAPI 入门 杨中科

ASP.NETCore WebAPI入门1 回顾 mvc开发模式 前端代码和后端代码是混在一个项目之中 WEB API 1、什么是结构化的Http接口。Json。 2、Web API项目的搭建。 3、Web API项目没有Views文件夹。 4、运行项目&#xff0c;解读代码结构。 5、【启用OpenAPI支持】→>swagger,在界…

Pytorch从零开始实战15

Pytorch从零开始实战——ResNeXt-50算法实战 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——ResNeXt-50算法实战环境准备数据集模型选择开始训练可视化总结 环境准备 本文基于Jupyter notebook&#xff0c;使用Python3.8&#xff0c;Pytor…

高效分割视频:批量剪辑,轻松提取m3u8视频技巧

在数字媒体时代&#xff0c;视频分割是一项常见的需求。无论是为了编辑、分享还是其他要求&#xff0c;经常要将长视频分割成多个短片。传统的视频分割方法往往需要手动操作&#xff0c;既耗时又容易出错。现在来看云炫AI智剪高效分割视频的方法&#xff0c;批量剪辑并轻松提取…

nest框架的bull队列的基本使用

前言 nestjs/bull是一个用于处理队列的Nest.js模块。它基于Bull库&#xff0c;提供了在Nest框架中使用队列的功能&#xff0c;这个模块要跟redis联合起来使用 1.下载队列模块&#xff1a; npm install --save nestjs/bull bull redis 项目结构&#xff1a; 2. 在模块中导入B…

佳能G3800彩色喷墨多功能一体打印机报5B00错误代码处理方法

5B00错误代码的含义 5B00错误代码是指佳能G3800打印机的“废墨仓已满”。这个废墨仓是打印机内部的一个部件&#xff0c;主要用于收集打印过程中产生的废墨。当废墨仓已满时&#xff0c;打印机就会报5B00错误代码。 佳能G3800彩色喷墨多功能一体打印机报5B00错误代码处理办法 …

vue3中标签form插件

想写一个系统&#xff0c;对八字进行标注&#xff0c;比如格局&#xff0c;有些八字就有很多格局&#xff0c;于是就想着使用el-tag但是&#xff0c;form表单中如何处理呢&#xff1f; 这个时候&#xff0c;就需要自己写一个,modelValue是表单的默认属性 <template><…

uniCloud 云数据库(新建表、增、删、改、查)

新建表结构描述文件 todo 为自定义的表名 表结构描述文件的默认后缀为 .schema.json 设置表的操作权限 uniCloud-aliyun/database/todo.schema.json 默认的操作权限都是 false "permission": {"read": false,"create": false,"update&quo…

stm32学习总结:5、Proteus8+STM32CubeMX+MDK仿真串口并使用串口打印日志(注意重定向printf到串口打印的问题)

stm32学习总结&#xff1a;5、Proteus8STM32CubeMXMDK仿真串口并使用串口打印日志&#xff08;注意重定向printf到串口打印的问题&#xff09; 文章目录 stm32学习总结&#xff1a;5、Proteus8STM32CubeMXMDK仿真串口并使用串口打印日志&#xff08;注意重定向printf到串口打印…

网工内推 | 事业单位、上市公司网工,五险一金补贴多

01 中科中山药物创新研究院 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1.负责信息化网络数据安全&#xff0c;加固网络安全、渗透测试、风险评估、漏洞扫描、风险管理和风险评估方法。对防火墙、IDS、IPS、蜜罐、防DDOS、VPN等设备的运行管理&#xff1b; 2.负责机…

FPGA——VIVADO生成固化文件,掉电不丢失

VIVADO生成固化文件 (1)加入代码(2)生成bin文件&#xff0c;并且下载 (1)加入代码 设计文件(.xdc)中加入这段代码: set_property CFGBVS VCCO [current_design] set_property CONFIG_VOLTAGE 3.3 [current_design] set_property BITSTREAM.GENERAL.COMPRESS true [current_de…

斯坦福和 Meta学者发现Gemini在常识推理任务中有较强潜力;初学者GPT:Ai和LLM资源

&#x1f989; AI新闻 &#x1f680; 斯坦福和 Meta学者发现Gemini在常识推理任务中有较强潜力 摘要&#xff1a;斯坦福和Meta的学者发表论文为Gemini正名&#xff0c;他们发现之前对Gemini的评估并不能完全捕捉到其真正的常识推理潜力。他们设计了需要跨模态整合常识知识的任…