TensorFlow ops:tf.round為「Bankers Rounding」,不是什麼「四捨五入」

2020-10-13 11:00:26

田海立@CSDN 2020-10-11

TensorFlow裡的運算元round不是什麼四捨五入,而是Bankers Rounding——四捨六入五取偶。

用搜尋工具搜尋,如果不是連結到官方網站的話,特別是到連結到中文描述,看起來還很官方的樣子的地方,會把round就直接翻譯成「四捨五入」,希望你再搜尋的時候,看到的是本文的描述。

 

誤導性的解釋

搜尋tf.round,結果第一條的誤導性描述:

https://www.w3cschool.cn/tensorflow_python/tensorflow_python-cnvw2in5.html

上面這一段應該是官方描述的翻譯,但這翻譯也太誤導了。

 

TF官方描述

下面看官方(也不是TF的官網,但這是能被搜尋到並開啟的)的描述:

https://tensorflow.google.cn/api_docs/python/tf/math/round

所以,TensorFlow裡的round是Rounds half to even,也就是Bankers Rounding。

 

Bankers Rounding是什麼

TF官網沒有具體的描述Bankers Rounding是什麼,但Bankers Rounding是容易找到的

http://wiki.c2.com/?BankersRounding

總結起來就是,取最近的偶數整數,具體來說:

  1. 小數部分小於0.5,則捨去;
  2. 小數部分大於0.5(注:0.5...x 也是大於0.5的),則進位;
  3. 小數部分恰好為0.5,則要看整數部分,也就是:
  •     整數為偶數則捨去小數;
  •     整數為奇數則進位到整數

            這樣取得的整數結果就是偶數了。

所以Bankers Rounding也通常被稱做「四捨六入五取偶」。

例子中:

  • 0.9 -> 1:case#2,進位;
  • 2.5 -> 2:case#3,2為偶數,小數捨去;
  • 2.3 -> 2:case#1,捨去;
  • 1.5 -> 2:case#3,1為奇數,小數進位;
  • -4.5 -> -4:case#3,-4為偶數,小數捨去。