LoginSignup
0
0

[Swift] 数値の大きさ(絶対値)を得る

Posted at

abs()じゃないの?

もちろんabs()でいいです。
しかし、Swiftのすべての数値型にはプロパティとして大きさ(magnitude)を備えています。
ドキュメントにもmagnitudeは絶対値であると明記されています。

使う

let i: Int = -1
let f: Float = -5.3
let d: Double = -3.0918

print(i.magnitude)  // prints 1
print(f.magnitude)  // prints 5.3
print(d.magnitude)  // prints 3.0918

結果は大きさ(絶対値)です。

let i: Int = 1
let f: Float = 5.3
let d: Double = 3.0918

print(i.magnitude)  // prints 1
print(f.magnitude)  // prints 5.3
print(d.magnitude)  // prints 3.0918

正数でもおなじです。

そして、

let ui: UInt = 1
let ui8: UInt8 = 1
let ui16: UInt16 = 1
let ui32: UInt32 = 1
let ui64: UInt64 = 1

print(ui.magnitude)  // prints 1
print(ui8.magnitude)  // prints 1
print(ui16.magnitude)  // prints 1
print(ui32.magnitude)  // prints 1
print(ui64.magnitude)  // prints 1

符号無し整数もmagnitudeプロパティをもっています。

なにもの?

このmagnitudeプロパティはNumericプロトコルが持っています。
Numericプロトコルは全ての数値型が適合すべきプロトコルです。
Numericプロトコルには加減乗算が含まれておりまさしく数値型の基本となっています。(除算はありません。)

しかし、このmagnitudeプロパティは元の数値型と違う型である可能性があります。
たとえば実数ベクトル型を考えた場合、その大きさは実数であるためこのような措置がとられています。
このためはジェネリックな型や関数で使用する場合問題が発生することが予想されます。

なので絶対値を取得したい場合はabs()を使いましょう

え?

いかがでしたか?

数値型から数値の大きさを取得する方法を見てきました。

数値型はNumericプロトコルに適合する型だということが分かりました。

またNumericプロトコルがもつnagmitudeプロパティがその大きさを示すものであることがわかりました。

またnagmitudeプロパティの型が元の方と異なる場合があるためジェネリックな対象での使用には問題が発生する可能性があることも分かりました。

そのため絶対値を求めたい場合は通常abs()を使うことが推奨されていることも分かりました。

nagmitudeはその大きさが必要な時のみの使用にとどめましょう。

え?

え?

0
0
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
0
0