`
Neil_yang
  • 浏览: 130045 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

Java中的strictfp关键字

    博客分类:
  • JAVA
阅读更多

strictfp

  Strictfp —— Java 关键字。
  strictfp, 即 strict float point (精确浮点)。
  strictfp 关键字可应用于类、接口或方法。使用 strictfp 关键字声明一个方法时,该方法中所有的float和double表达式都严格遵守FP-strict的限制,符合IEEE-754规范。当对一个类或接口使用 strictfp 关键字时,该类中的所有代码,包括嵌套类型中的初始设定值和代码,都将严格地进行计算。严格约束意味着所有表达式的结果都必须是 IEEE 754 算法对操作数预期的结果,以单精度和双精度格式表示。
  如果你想让你的浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致的话,可以用关键字strictfp.
  示例 1
下面的示例演示了一个使用 strictfp 修饰符声明的类。
  
  
// Example of precision control with strictfp 

  public strictfp class MyClass

  {

  public MyClass(){}

  public static void main(String[] args)

  {

  float aFloat = 0.6710339f;

  double aDouble = 0.04150553411984792d;

  double sum = aFloat + aDouble;

  float quotient = (float)(aFloat / aDouble);

  System.out.println("float: " + aFloat);

  System.out.println("double: " + aDouble);

  System.out.println("sum: " + sum);

  System.out.println("quotient: " + quotient);

  }

  } 
 
  示例输出
  
    float: 0.6710339

  double: 0.04150553411984792

  sum: 0.71253945297742238

  quotient: 16.1673355
 
  示例 2
  下面的示例演示了一个使用 strictfp 修饰符声明的方法。
  
// Example of precision control with strictfp: 

  public class MyClass2

  {

  public float aFloat;

  public double aDouble;

  public MyClass2(){}

  public strictfp double add(float a, double b)

  {

  return (a + b);

  }

  public static void main(String[] args)

  {

  MyClass2 myClass2 = new MyClass2();

  myClass2.aFloat = 0.6710339f;

  myClass2.aDouble = 0.04150553411984792d;

  double sum = myClass2.add(myClass2.aFloat, myClass2.aDouble);

  System.out.println("float: " + myClass2.aFloat);

  System.out.println("double: " + myClass2.aDouble);

  System.out.println("sum: " + sum);

  }

  } 
 
  示例输出
  
    float: 0.6710339

  double: 0.04150553411984792

  sum: 0.71253945297742238
 
==============================================================

自Java2以来,Java语言增加了一个关键字strictfp。strictfp的意思是FP-strict,也就是说精确浮点的意思。在Java虚拟机进行浮点运算时,如果没有指定strictfp关键字时,Java的编译器以及运行环境在对浮点运算的表达式是采取一种近似于我行我素的行为来完成这些操作,以致于得到的结果往往无法令你满意。而一旦使用了strictfp来声明一个类、接口或者方法时,那么所声明的范围内Java的编译器以及运行环境会完全依照浮点规范IEEE-754来执行。因此如果你想让你的浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致的话,那就请用关键字strictfp。

你可以将一个类、接口以及方法声明为strictfp,但是不允许对接口中的方法以及构造函数声明strictfp关键字,例如下面的代码:

1. 合法的使用关键字strictfp

strictfp interface A ...{}
public strictfp class FpDemo1 ...{
    
strictfp void f() ...{}
}

2. 错误的使用方法

interface A ...{
    
strictfp void f();
}

public class FpDemo2 ...{
    
strictfp FpDemo2() ...{}
}

一旦使用了关键字strictfp来声明某个类、接口或者方法时,那么在这个关键字所声明的范围内所有浮点运算都是精确的,符合IEEE-754规范的。例如一个类被声明为strictfp,那么该类中所有的方法都是strictfp的。


分享到:
评论
8 楼 bfyycdi 2014-04-06  
精确这个词有误导意义啊,IEEE的浮点也不是精确的啊!
7 楼 xiaguangme 2013-11-29  
xiaguangme 写道
strictfp 在类中,是可以用来修饰方法的

private strictfp void test()
    {}
6 楼 xiaguangme 2013-11-29  
strictfp 在类中,是可以用来修饰方法的
5 楼 dracularking 2013-04-03  
翻译成浮点严格更好一点
4 楼 littleboyandgirl 2012-12-12  
利用博主的例子做了一下,加不加结果都一样.而且博主的第一个例子结果好像不是很对吧~~~对这个关键字体会还不是很透彻.......
3 楼 小羊fc 2012-10-02  
感激博主的教导!咦!我都不知道还有这样的关键字
2 楼 linchixiong 2011-11-04  
这有点前后矛盾啊……下面提到的错误用法,在上面却是例子……
1 楼 jorwen_fang 2010-01-24  
天啊,我用了java5年了,也才知道有这种关键字啊。白活了

相关推荐

    java中的关键字大全

    ### Java中的关键字大全 在Java编程语言中,关键字是一组预定义的词汇,它们具有特殊的含义和用途。理解和掌握这些关键字对于编写有效的Java程序至关重要。本文将详细介绍Java中的一些核心关键字,并提供相应的解释...

    Java标识符、关键字和保留字

    Java中的关键字、保留字和标识符是程序设计的基本组成元素,它们具有特定的含义和用途。 **关键字**: 在Java中,关键字具有特殊的意义,它们是编程语言的保留字,用来指示编译器执行特定的操作。Java关键字是小写...

    Java基础标识符关键字数据类型PPT教案学习.pptx

    Java 语言中的关键字是 Java 语言规定的具有特定含义的标识符,它们对 Java 的编译器有特殊的意义,用来表示一种数据类型,或者表示程序的结构等。Java 关键字一律由小写英文字母组成。按照用途可以划分为:数据类型...

    java 关键字查询文档

    Java 关键字是编程语言中具有特殊含义的保留词汇,它们不能用作变量名、类名或方法名。这些关键字在 Java 中扮演着至关重要的角色,用于定义程序结构、控制流程、内存管理等方面。这份“java 关键字查询文档”显然是...

    JAVA中的关键字和保留字.doc

    Java编程语言中包含了一系列的关键字和保留字,这些词汇具有特殊的含义,用于构建程序结构和控制程序流程。关键字是Java语言预定义的标识符,它们在编译器中有特殊的解释,不能作为变量、函数名或其他标识符使用。...

    java编程全部关键字解释

    这只是Java关键字的一部分,还有许多其他关键字,如 `float`, `for`, `if`, `import`, `instanceof`, `new`, `package`, `return`, `static`, `strictfp`, `super`, `this`, `throw`, `throws`, `transient`, `try`,...

    strictfp-changes.pdf

    ### 关于strictfp关键字的理解与应用 #### 一、引言 在Java语言的发展历程中,JDK 1.2的发布引入了`strictfp`关键字。这一关键字的出现主要针对的是浮点运算的精确性问题,特别是对于那些对精度有严格要求的应用...

    java51个关键字详解

    Java编程语言中有51个关键字,它们在程序中扮演着至关重要的角色,用来定义类、接口、变量、方法以及控制程序流程。以下是一些主要的关键字及其解释: 1. `abstract`:抽象关键字,用于声明抽象类和抽象方法。抽象...

    Java的关键字与保留字

    Java拥有51个关键字,这些关键字在编程中扮演着核心角色,用于声明类型、控制流程、异常处理等。下面我们将逐一介绍这些关键字: 1. **abstract**:用于定义抽象类和抽象方法,表示该类不能被实例化,或方法没有...

    java关键字、保留字

    本文将详细介绍Java中的关键字及其用途。 #### 关键字列表与解释 1. **abstract** - **用途**:用于声明抽象类和抽象方法。抽象类不能实例化,只能作为其他类的父类。抽象方法是没有实现的方法,必须在子类中提供...

    java关键字和java命名规范.pdf

    Java关键字和命名规范是Java编程语言中的基础概念,它们对于编写清晰、规范的代码至关重要。Java关键字是Java语言内置的、具有特殊用途的保留字,而命名规范则是关于如何给类、方法、变量等命名的约定。 ### Java...

    java关键字

    Java的关键字,即保留字,是Java语言中具有特殊意义的标识符,它们预定义并保留用于语言本身的语法结构。理解这些关键字是学习Java的基础之一。本文将详细介绍Java中的50个常用关键字,并按照其功能类别进行分类。 ...

    java保留字、关键字

    在Java编程语言中,保留字(Reserved Words)和关键字(Keywords)是两个非常重要的概念,它们构成了Java语法的基础。保留字是Java语言已经预定义并赋予特定含义的词汇,而关键字则是Java语法结构中不可或缺的部分。...

    01-Java语言基础(关键字)

    以上仅是Java关键字的一部分,还有许多其他关键字,如`synchronized`, `volatile`, `transient`, `native`, `strictfp`等,它们各自承担着特定的功能。理解和熟练使用这些关键字是成为一名合格的Java程序员的基础。...

    JAVA标识符关键字和数据类型.ppt

    Java中一些赋以特定的含义,用做专门用途的字符串称为关键字(keyword)。所有Java关键字都是小写英文字符串。goto和const虽然从未使用,但也作被为Java关键字保留。Java关键字包括: * 原始数据类型:byte、short...

    java中“53”个关键字(含2个保留字)

    在Java编程语言中,关键字是具有特殊含义的预定义标识符,它们被Java解析器用来识别语法结构。这些关键字不能用作变量名、类名或方法名。在Java中,一共有53个关键字,包括两个保留字。下面将详细阐述这些关键字的...

    Java关键字

    在Java中,一共有51个关键字(包括保留字),但描述中提到的是48个,可能是因为某些关键字在特定上下文不常用或者被归类到保留字中。下面将详细介绍这些关键字及其用途。 1. **abstract** - 用于声明抽象类或抽象...

    源码关键字统计.rar

    在Java编程语言中,关键字是预定义的、具有特殊含义的词汇,它们是构成程序语法结构的基础元素。这篇关于“源码关键字统计”的主题旨在分析Java源代码文件,并计算其中出现的关键字数量。这个任务涉及到文件读取、...

    Java中的关键字_动力节点Java学院整理

    此外,Java中还有一个特殊的修饰符strictfp,它用于指定浮点运算必须遵循IEEE 754标准,确保在不同的平台和编译器上进行严格的浮点运算。 Java的关键字列表还包括其他多种如抽象类声明的abstract,同步代码块的...

    Java关键字大全 Java关键字大全

    以上只是 Java 关键字中的一部分,还有许多其他关键字,如 `do`, `else`, `extends`, `final`, `finally`, `float`, `for`, `if`, `implements`, `import`, `instanceof`, `int`, `interface`, `long`, `native`, `...

Global site tag (gtag.js) - Google Analytics