2014-10-18 5 views
0

부동 소수점 및 iOS 장치에 관한 몇 가지 질문이 있습니다.

주어진 iOS 장치에서 부동 소수점이 결정적입니까?
모든 iOS 장비에서 부동 소수점이 결정적입니까?iOS 기기에서 부동 소수점이 결정적입니까?

그렇지 않은 경우 결정적으로 만들 수있는 방법이 있습니까? 내가 생각하고있는 것은 : 컴파일러 설정 변경, 수학 연산의 축소 된 사용 등입니다.

그렇게 할 방법이 없다면, 가장 좋은 대안은 무엇입니까?
대신 고정 점을 사용할 수 있습니까? 그것은 NSDecimalNumber를 사용하는 것이겠습니까?

건배.

+0

결정 성이 무엇을 의미하는지 명확히 할 수 있습니까? 무슨 문제 있니? 컴파일러 설정은 IEEE 부동 소수점 준수에 영향을 미치므로 컴파일 할 때 올바른 플래그가 설정되도록 Xcode 설정을 확인해야합니다. –

+0

내 코드가 결정적이기를 원합니다. 다른 os 및 장치에서 동일한 값을 반환하도록 float을 반환하는 작업을 원합니다. 나는 결과의 정확성에 대해별로 신경 쓰지 않는다. 단지 안정되어야한다. http://randomascii.wordpress.com/2013/07/16/floating-point-determinism/ –

+1

정확히 동일한 입력 (시스템 설정 포함)이 주어지면 모든 IEEE 부동 소수점 연산에 대해 동일한 출력을 얻을 수 있습니다. iOS의 경우 정수 유형에 대한 크기가 다른 iOS 버전의 차이가 발생할 위험이 있으며 더 작은 값으로 오버플로가 발생하는 경우에만 발생할 수 있습니다 (예 : 오류). –

답변

1

동일한 데이터 크기의 결과가 동일해야합니다. 부동 소수점에 대한 IEEE 표준은 서로 다른 부동 소수점 크기에 대한 부동 소수점 연산의 결과를 나타냅니다.

다른 데이터 유형의 정의가 아키텍처마다 다른 경우 문제가 발생할 수 있습니다.

"float"의 크기는 ANSI C에서 공식적으로 정의되지 않습니다. 일부 플랫폼에서는 4 바이트가되고 다른 플랫폼에서는 8 바이트가 될 수 있습니다. (예를 들어, NSInteger는 32 비트 디바이스에서는 32 비트이고 64 비트 디바이스에서는 64 비트입니다. 정수형이지만 플랫폼에 따라 크기가 변경되는 유형의 예입니다.)

애플이 32 비트와 64 비트 플랫폼간에 데이터 유형의 크기를 변경했는지는 모르겠다. 어쩌면 결론적으로 알고있는 누군가가 여기에서 차임 할 수 있습니다.

최신 iOS 기기는 64 비트입니다. float/CGFloat (sizeof() 사용)의 크기를 확인하는 것이 좋습니다. 새 64 비트 장치 중 하나에 액세스 할 수없는 경우 64 비트 시뮬레이터를 사용하여 테스트 할 수 있어야합니다.

좋아요

+0

좋은 지적. float의 크기는 동일하게 유지됩니다. http://stackoverflow.com/questions/2107544/types-in-objective-c-on-iphone –