日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【Java】关键词strictfp解析

發布時間:2025/3/15 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java】关键词strictfp解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java為何要引入strictfp

strictfp是Java中的一個關鍵字,全稱 strict float point (精確浮點),用于限制浮點計算并在執行浮點變量操作時確保每個平臺上的結果相同。

浮點計算與平臺有關,即在不同平臺(16/32/64位處理器)上運行類文件時,可以實現不同的輸出(浮點值)。為了解決這類問題,在JDK1.2版本中引入了strictfp關鍵字,遵循IEEE754標準進行浮點計算。(也許可能真的有人不知道IEEE754,那就建議自行了解咯~)

如果你想讓你的浮點運算更加精確,而且不會因為不同的硬件平臺所執行的結果不一致的話,推薦使用關鍵字strictfp。

strictfp與Java方法

strictfp與普通方法

下面代碼的calMoney()被strictfp修飾了,那就表示這個方法會遵照strictfp的“要求”。

public class Coffee { private double price;private double weight;public Coffee(double price, double weight) {this.price = price;this.weight = weight;}public strictfp double calMoney() {return price*weight;}//setters and getters}

strictfp與抽象方法

strictfp絕對不能用于抽象方法!!!會編譯錯誤的!!!

public interface ICalculate { strictfp double multiply();}

上面的代碼就是使用了strictfp修飾接口中的抽象方法,編譯錯誤!!!

strictfp與Java類

strictfp與普通類

當使用strictfp修飾符聲明類時,那么在類中聲明的所有方法以及在該類中聲明的所有嵌套類型都隱式被strictfp修飾。

public strictfp class Coffee { private double price;private double weight;public Coffee(double price, double weight) {this.price = price;this.weight = weight;}public double calMoney() {return price*weight;}//setters and getters}

如上代碼,calMoney() 雖然沒有直接被 strictfp 修飾,但由于Coffee這個類被 strictfp 修飾了,所以實際上 calMoney() 還是被strictfp修飾了。

strictfp與抽象類

strictfp 可以用于抽象類,在抽象類被繼承,其中的抽象方法被實現的時候會默認使用 strictfp 修飾。

但是,前面說過,strictfp 不能用于抽象類中抽象方法的修飾,再次強調!!!

public abstract strictfp class AbstractCoffee { private double price;public Coffee(double price) {this.price = price;}public abstract double calculate();//setters and getters} public class Coffee extends AbstractCoffee { private double weight;public Coffee(double price, double weight) {super(price);this.weight = weight;}public double calculate() {return getPrice()*weight;}//setters and getters}

strictfp與接口

strictfp 可以用于接口,在接口被實現,其中的抽象方法也被實現的時候會默認使用 strictfp 修飾。

但是,前面說過,strictfp 不能用于接口中抽象方法的修飾,再次強調!!!

public strictfp interface ICalculate { double multiply();}

如上代碼,multiply()雖然沒有被(事實上也不能被)strictfp修飾,但下面的multiply()方法就默認了這一點:

public class Coffee implements ICalculate { private double price;private double weight;public Coffee(double price, double weight) {this.price = price;this.weight = weight;}public double multiply() {return price*weight;}//setters and getters}

上面的Coffee類沒有被strictfp修飾,multiply()方法也沒有被strictfp修飾,但由于multiply()是從ICalculate接口繼承過來的,所以默認帶上了strictfp的修飾。

抽象類中,strictfp只是不能修飾抽象方法,普通方法不受限。但由于接口的方法是隱式抽象的,因此其實strictfp 不能用于接口內的任何方法!!!!

strictfp的功能測試

public class StrictfpTest {private static strictfp double add(float a, double b) {return a+b;}public static void main(String[] args) {System.out.println(0.6710339+0.04150553411984792);System.out.println(add(0.6710339f, 0.04150553411984792));}}

測試結果:

0.7125394341198479 0.7125394529774224

strictfp是高精的嗎

答案是:No!!!絕對不是!!!

strictfp只是保證浮點運算都嚴格按照IEEE754進行,保證了各種平臺下浮點運算規則的統一,并不是確保了高精。

比如3*0.1,如果我沒記錯的話,你就算使用strictfp也不能精確得到0.3,更何況高精運算。

高精運算如果能使用輪子的話就用java.math.BigDecimal吧!

總結

以上是生活随笔為你收集整理的【Java】关键词strictfp解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。