4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

cvt -数値型変換命令-

Last updated at Posted at 2020-12-23

はじめに

可能な変換早見表

to \ from s16 u16 f16 s32 u32 f32 s64 u64 f64
s16 - - ZAMNP - - - - - -
u16 - - ZAMNP - - - - - -
f16 C C - - - C - - -
s32 - - - - _ ZAMNP - - -
u32 - - - - - ZAMNP - - -
f32 - - C C C - - - CX
s64 - - - - - - - - ZAMNP
u64 - - - - - - - - ZAMNP
f64 - - - - - C C C -
  • Zrounding-to-Zeroを表し、0に向かって丸め込まれる(いわゆる切り捨て)
  • Mrounding-to-Minus-infinityを表し、負の無限大方向へ丸め込まる
  • Prounding-to-Positive-infinityを表し、正の無限大方向へ丸め込まれる(切り上げに近い)
  • Nrounding-to-Nearest-ties-to-evenを表し、最近接丸めを行う(四捨五入に近い)
  • Arounding-to-neArest-ties-to-awayを意味し、最近接丸めを行う(四捨五入に近い)
  • Xrounding-to-nearest-oddを表し、最近接丸めを行う(四捨五入に近い)
  • Cは丸めモードがFPCRレジスタで制御される。デフォルトは切り捨て(rounding-to-zero)

IEEE 754 で制定されている丸め方法

  • IEEE 754で制定されている丸め方法は、以下の5種類が制定されている
    • rounding-to-zero
    • rounding-to-minus-infinity
    • rounding-to-positive-infinity
    • rounding-to-nearest-ties-to-even
    • rounding-to-nearest-ties-to-away
  • 最新版はIEEE 754-2019が発行されている
  • このあたり、だめぽラボさんの浮動小数点数小話を参考にして読んだ。
    • IEEE 754-2019に即して、とても厳密に、詳しく解説している良書である

NEONでの変換命令

  • 先程の早見表を見れば分かる通り、整数型→実数型への変換は、FPCRレジスタによって丸め方法が決まる
    • まあ、整数を実数にするのなら大きい数値を使わない限り、別段心配しなくても良い
    • int32x4_tfloat32x4_tに変換する命令はvcvtq_f32_s32である
    • reinterpretの記事でも触れたが、末尾に型が2つ付く場合は<戻り値の要素の型>_<引数の要素の型>で表される
  • 一方で、実数型→整数型への変換では、FPCRレジスタ関係なく、命令ごとに丸め方法が違う
    • なお、非常にややこしいのだが、Arm v7でサポートされているのはrounding-to-zeroのみである
  • なお、float64x2_tからfloat32x2_tへの変換だけ、なぜかrounding-to-nearest-oddという、IEEE754 非準拠の変換モードが使われる命令がある。

おわりに

  • 浮動小数点から整数型、及びその逆変換を紹介した
  • 明日は最終日の予定で、ポエムを書く予定です
4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?