当前位置: 首页 > news >正文

java真有一个关键字叫strictfp啊

strictfp🛻

    • 纳尼, 真有一个关键字叫 strictfp 啊
      • 不加跟加了 strictfp 有什么区别呢
      • 浮点数精确运算

纳尼, 真有一个关键字叫 strictfp 啊

Java确实有一个关键字叫做 strictfpstrictfp 是一个修饰符,用于强制执行浮点运算的规范化,以确保在不同平台和不同编译器上得到相同的结果。使用 strictfp 修饰的类、方法或接口中的所有浮点运算都将按照 IEEE 754 标准执行,这可以避免浮点数计算在不同平台上的差异。可以在类、接口或方法级别上使用 strictfp 关键字。如果使用在类或接口上,则该修饰符将强制执行该类或接口中所有方法的浮点运算规范化;如果使用在方法上,则该方法中的所有浮点运算都将强制规范化。下面是一个使用 strictfp 关键字的示例:

public strictfp class ExampleClass {
    public strictfp void exampleMethod() {
        double x = 3.14159;
        double y = 2.71828;
        double z = x * y;
        System.out.println("z = " + z);
    }
}

在上面的示例中,ExampleClass 类和 exampleMethod() 方法都使用了 strictfp 关键字,这意味着在进行浮点运算时将强制执行规范化。

不加跟加了 strictfp 有什么区别呢

我们来看一下在不加 strictfp 和加了 strictfp 之后的输出结果的差异。

我们先来看一下不加 strictfp 关键字的情况:

public class FloatingPointExample {
    public static void main(String[] args) {
        double x = 3.14159;
        double y = 2.71828;
        double z = x * y;
        System.out.println("z = " + z);
    }
}

运行结果:

z = 8.539734042200001

可以看到,在不加 strictfp 关键字的情况下,输出结果为 8.539734042200001,结果并不是完全准确的。

接下来,我们来看一下加了 strictfp 关键字之后的情况:

public strictfp class FloatingPointExample {
    public static void main(String[] args) {
        double x = 3.14159;
        double y = 2.71828;
        double z = x * y;
        System.out.println("z = " + z);
    }
}

运行结果:

z = 8.539734222

可以看到,加了 strictfp 关键字之后,输出结果为 8.539734222,结果更加准确。

这是因为 strictfp 关键字强制要求使用 IEEE 754 标准进行浮点运算规范化,从而确保在不同平台上得到相同的结果。

浮点数精确运算

如果需要进行浮点数精确运算,Java 中推荐使用 BigDecimal 类。BigDecimal 是 Java 中用于高精度计算的类,可以处理任意精度的十进制数,而且不会丢失精度。

除了使用 BigDecimal 类,还有一些其他的方案,例如使用分数类或自定义实现高精度计算,不过相对来说 BigDecimal 更加方便易用。以下是使用 BigDecimal 的示例:

import java.math.BigDecimal;

public class BigDecimalExample {
    public static void main(String[] args) {
        BigDecimal x = new BigDecimal("3.14159");
        BigDecimal y = new BigDecimal("2.71828");
        BigDecimal z = x.multiply(y);
        System.out.println("z = " + z);
    }
}

在上面的示例中,我们使用 BigDecimal 类创建了三个对象 xyz,分别表示 3.14159、2.71828 和它们的乘积。使用 multiply() 方法计算它们的乘积,得到结果 z。最后,我们使用 println() 方法将结果输出到控制台。

需要注意的是,在使用 BigDecimal 进行运算时,需要使用 BigDecimal 的方法进行运算,不能直接使用运算符,例如 +-*/ 等。

相关文章:

  • MySQL OCP888题解069-CHECK TABLE
  • Redis 官方可视化工具-RedisInsight
  • 基于springboot实现财务管理系统【源码+论文】分享
  • Parasoft帮助中移智行顺利获得A-SPICE L3和ISO26262功能安全认证证书
  • 计算机组成 --- 计算机系统的多级层次结构
  • 新六级通关训练
  • Python是不是被严重高估了?
  • 华为欧拉服务器安装docker及达梦8
  • 【AWS入门】通过VPC创建云上私有网络
  • winform的helloworld
  • vue3笔记
  • 基于html+css的图片旋转
  • 【iOS】ARC学习
  • 3. QML实现蓝牙通信
  • 算法第二十期——FLoyd算法的入门与应用
  • 深入了解以太坊
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 分享一款快速APP功能测试工具
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • emacs初体验
  • Java基本数据类型之Number
  • LintCode 31. partitionArray 数组划分
  • MaxCompute访问TableStore(OTS) 数据
  • Redash本地开发环境搭建
  • Sass 快速入门教程
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 仿天猫超市收藏抛物线动画工具库
  • 给新手的新浪微博 SDK 集成教程【一】
  • 诡异!React stopPropagation失灵
  • 理解在java “”i=i++;”所发生的事情
  • 前端之React实战:创建跨平台的项目架构
  • 手写双向链表LinkedList的几个常用功能
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​secrets --- 生成管理密码的安全随机数​
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (1)Android开发优化---------UI优化
  • (floyd+补集) poj 3275
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (转)人的集合论——移山之道
  • *Django中的Ajax 纯js的书写样式1
  • .CSS-hover 的解释
  • .net CHARTING图表控件下载地址
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET运行机制
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [c#基础]值类型和引用类型的Equals,==的区别
  • [c++] C++多态(虚函数和虚继承)
  • [cocos creator]EditBox,editing-return事件,清空输入框
  • [GDMEC-无人机遥感研究小组]无人机遥感小组-000-数据集制备