TensorFlow ops:tf.round為“Bankers Rounding”,不是什麼“四捨五入”
阿新 • • 發佈:2020-10-13
田海立@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
總結起來就是,取最近的偶數整數,具體來說:
- 小數部分小於0.5,則捨去;
- 小數部分大於0.5(注:0.5...x 也是大於0.5的),則進位;
- 小數部分恰好為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為偶數,小數捨去。