【Swift】 Decimal형 언더플로, 오버플로우

2740 단어 SwiftSwift4
Swift의 Decimal 형의 언더 플로우에 조금 당황했기 때문에 썼습니다.

결론부터 쓰면
언더플로 → 갑자기 큰 값이 된다
오버플로 → NaN이 됨

빨리 언더 플로우를 일으켜 보자.

내부 10진수 계산의 Decimal형 변수에 0.02를 넣어 10회 곱하는 프로그램입니다.
import Foundation

var cur = Decimal(string:"0.02")!
cur *= cur
cur *= cur
cur *= cur
cur *= cur
cur *= cur
cur *= cur
cur *= cur
cur *= cur
cur *= cur
cur *= cur

결과는 다음과 같다.


스쿠쇼가 조금 보기 어렵기 때문에 결과를 쓰면 다음과 같다.
⓪0.02
①0.0004
②0.00000016
③0.0000000000000256
④0.000000000000000000000000000065536
⑤0.0000000000000000000000000000000000000000000000000000004294967296
⑥0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
⑦340282366920938463463374607431768211460
⑧1157920892373161954235709850086879078560000000000000000000000000000000000000
⑨13407807929942597099574024998205846128100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
⑩NaN

0
htps : // 코 m / 히로키 _ 카와 카미 / ms / 1867 A1 f91 5b90d61
위의 URL을 참고로 하면 Decimal형으로 언더플로우의 우려가 있는 경우는, 곱셈시에 양변의 절대치가 1 미만일 때 만약 대답의 절대치가 1 이상이 되는 경우는, 체크를 하는 것이 좋다 맞습니다.

좋은 웹페이지 즐겨찾기