C、C++ 和 Java 中的浮點運算和結合律
在 C、C++ 和 Java 中,我們對浮點數執行一些數學運算。現在,我們將在其中檢查浮點數是否遵循結合律。
答案是:否。在某些情況下,浮點數不能遵循結合律。這裡,我們將看到一些示例。
示例程式碼
#include<iostream>
using namespace std;
main() {
float x = -500000000;
float y = 500000000;
float z = 1;
cout << "x + (y + z) is: " << x + (y + z) << endl;
cout << "(x + y) + z is "<< (x + y) + z << endl;
}輸出
x + (y + z) is: 0 (x + y) + z is 1
在這裡,我們可以看到結果不同,但是理論上可以講它們始終為 1。那麼問題來了,這是如何實現的?
在第一種情況下,執行 (500000000 + 1)。但是對於浮點數舍入,它又轉換為 500000000。現在,透過新增 -500000000,它變為 0。在第二個表示式中,值為 (-500000000 + 500000000) = 0,然後新增 1,因此最終結果為 1。
如果我們使用整數,則兩個表示式都將返回相同的結果 1。
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP