[an error occurred while processing this directive]
|
В устройстве производятся различные вычисления (вычисляю некоторые мгновенные значения) и 4-х байтового float мне достаточно и даже с избытком :-) Но вот попросили сделать такую примочку - пускай устройство вычисляет кроме мгновенных значений и почасовых значений тотальное суммарное значение с начала работы - т. е. пускай суммирует все значения. Ну и возникает проблемка - если я каждую секунду вычисляю некоторое мгновенное значение и суммирую их (за 3600 секунд будет часовое значение), то если устройство проработает годик и, допустим, уже насчитало сумарное значение порядка нескольких миллионов, то если я к десяти миллионам прибавлю одну тысячную, то показания float не изменятся (мантисса всего 24 бита) и будут возникать сильные погрешности в накоплении (что-то вроде 90000000 + 0.001 = 90000000 и приращение просто не учтется, если общая сумма дойдет до какого-то достаточно большого значения). Выход - я использую для накопления 8-байтовый тип double, в котором мантисса очень большая и этого ну с гарантией хватает для любого приложения (это просто чудовищная точность). Но какая проблема - double мне нужен только для вычисления накопления, а при обычных вычислениях мгновенных значений мне float-а достаточно, а теперь у меня все вычисления, где есть float, будут использовать арифметику double, что сильно увеличит время вычислений.
Вопрос - нет ли опции, чтобы сказать компилятору :
float a, b, c ;
a = b + c ; - используй здесь float для float-операндов!!!
Ну может pragma какая-нибудь ?
E-mail: info@telesys.ru