Какой самый точный тип данных для вычислений с плавающей запятой на iPhone OS? - PullRequest
0 голосов
/ 25 августа 2009

Я всегда думал, что это double, пока случайно не нажал floo + ESC, и он сказал мне, что есть функция floorl (<# long double #>). Итак, long double - это решение всех проблем с большой неточностью? ; -)

Или есть что-то более точное, чем это?

Ответы [ 4 ]

3 голосов
/ 25 августа 2009

Следует помнить, что long double просто действует как double на оборудовании iPhone. Вы не получаете никакой дополнительной точности от большего типа. Это даст вам больше точности в симуляторе, потому что вы работаете там на Mac, что может сбить вас с толку.

Как отмечается здесь (и другими комментаторами), NSDecimal или NSDecimalNumber - это способ получения точности (до 34 цифр), и вычисления, выполняемые с его помощью, выполняются с истинной десятичной математикой, а не двоичная с плавающей точкой. Это позволяет избежать многих ошибок, которые вы видите при обычной математике IEEE 754.

2 голосов
/ 25 августа 2009

Я думаю, long double - это предел, но это действительно зависит от того, что вы хотите сделать. Вы действительно сталкивались с проблемами неточности?

1 голос
/ 25 августа 2009

Добавление большей точности - один из подходов к решению проблемы, но реальная проблема иногда (обычно?) Заключается в том, как вы выполняете вычисления. В этом случае я назначаю здоровую дозу RTFM. Любой учебник по арифметике FP расскажет, почему некоторые формы уравнений являются катастрофическими и как избежать зияющей пасти забвения.

1 голос
/ 25 августа 2009

Для еще большей точности взгляните на класс NSDecimalNumber. Как говорится в другом комментарии - вы нашли какие-либо проблемы с неточностью. Также больше точности будет медленнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...