閱讀872 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Vim技能修煉教程(16) - 浮點數計算函數

浮點數計算函數

這一節的所有函數,隻有在vim編譯時支持了+float時才有效。

三角函數

  • sin() : sine正弦函數
  • cos() : cosine餘弦函數
  • tan() : tangent正切函數
  • asin() : arc sine反正弦函數
  • acos() : arc cosine反餘弦函數
  • atan() : arc tangent反正切函數
  • atan2({X坐標},{Y坐標}) : arc tangent反正切函數
  • sinh() : hyperbolic sine 雙曲正弦函數
  • cosh() : hyperbolic cosine雙曲餘弦函數
  • tanh() : hyperbolic tangent雙曲正切函數

這些函數基本上都是對應的C函數的封裝。比如對於雙曲正弦不熟悉的話,可以參看man sinh. 如果不理解atan2,可以man atan2.

數學計算

  • abs(): 絕對值
  • fmod(): 浮點餘數
  • exp(): e的乘方
  • log(): 自然對數
  • log10(): 以10為底的對數
  • pow(): 階乘
  • sqrt(): 平方根,如果求負數的平方根,返回NaN.
  • isnan(): 判斷是否為NaN。比如isnan(0.0/0.0)為真。

浮點數轉整數

  • float2nr() : 將浮點數轉成整數。
  • round() : round off, 四舍五入
  • ceil(): round up, 上舍入
  • floor(): round down,下舍入
  • trunc(): 簡單截斷小數點後麵的數

我們來寫個函數測試下它們的功能:

function Float2Number(arg)
        echo "Orginal value:"
        echo a:arg
        echo "float2nr:"
        echo float2nr(a:arg)
        echo "round:"
        echo round(a:arg)
        echo "ceil:"
        echo ceil(a:arg)
        echo "floor:"
        echo floor(a:arg)
        echo "trunc:"
        echo trunc(a:arg)
endfunction

我們先試試2.06:

Orginal value:
2.06
float2nr:
2
round:
2.0
ceil:
3.0
floor:
2.0
trunc:
2.0

我們再試試122.667:

Orginal value:
122.667
float2nr:
122
round:
123.0
ceil:
123.0
floor:
122.0
trunc:
122.0

我們再看一個負數:-9.08

Orginal value:
-9.08
float2nr:
-9
round:
-9.0
ceil:
-9.0
floor:
-10.0
trunc:
-9.0

最後來一個五入的負數:

Orginal value:
-65.96
float2nr:
-65
round:
-66.0
ceil:
-65.0
floor:
-66.0
trunc:
-65.0

我們總結一下:

  • 除了float2nr,其它所有截斷的結果還是浮點數
  • float2nr的策略跟trunc一致,也就是說,如果要想四舍五入的話,先做round再float2nr.
  • round是四舍五入,不管正負,都是四舍五入。
  • ceil取大於等於它的最小整數。
  • floor取小於等於它的最大整數。
  • trunc就是簡單去掉小數部分。

最後更新:2017-07-18 20:35:37

  上一篇:go  技術原理test
  下一篇:go  GPU加速深度學習