Обеспечение C++ удваивается, 64 бита

Приведенный ниже код должен работать нормально.

Если attr1 и attr2 - текст.

import { computed } from '@ember/object';
...
totalPrice: computed('attr1', 'attr2', function() {
  return `${this.attr1} ${this.attr2}`;
})

attr1 и attr2 являются числами.

attr1: 1,
attr2: 2,
totalPrice: computed('attr1', 'attr2', function () {
  return this.attr1 + this.attr2;
  //(or)
  return `${this.attr1 + this.attr2}`;
}),
19
задан Whatsit 15 April 2009 в 22:41
поделиться

7 ответов

Улучшение других ответов (при условии, что символ 8-битный, стандарт не гарантирует этого ..) ). Это будет выглядеть так:

char a[sizeof(double) * CHAR_BIT == 64];

или

BOOST_STATIC_ASSERT(sizeof(double) * CHAR_BIT == 64);

Вы можете найти CHAR_BIT, определенный в или .

12
ответ дан 30 November 2019 в 02:10
поделиться

Проверьте std :: numeric_limits :: is_iec559 , если вам нужно знать, является ли ваш Реализация C ++ поддерживает стандартные двойники. Это гарантирует не только то, что общее число битов равно 64, но также размер и положение всех полей внутри двойника.

7
ответ дан 30 November 2019 в 02:10
поделиться

В C99 вы можете просто проверить, определен ли символ препроцессора __ STDC_IEC_559 __ . Если это так, то вам гарантировано, что значение double будет 8-байтовым значением, представленным в формате IEEE 754 (также известный как IEC 60559). См. Стандарт C99, Приложение F. Однако я не уверен, доступен ли этот символ в C ++.

#ifndef __STDC_IEC_559__
#error "Requires IEEE 754 floating point!"
#endif

Кроме того, вы можете проверить предопределенные константы __ DBL_DIG __ (должно быть 15), __DBL_MANT_DIG __ (должно быть 53), __ DBL_MAX_10_EXP __ (должно быть 308), __ DBL_MAX_EXP __ (должно быть 1024), [113959_710] (1139597). и __ DBL_MIN_EXP __ (должно быть -1021). Они должны быть доступны во всех версиях C и C ++.

28
ответ дан 30 November 2019 в 02:10
поделиться

Я не думаю, что вы должны сосредоточиться на «необработанном размере» вашего двойника (который обычно составляет 80 бит, не 64 бит), а скорее по его точности.

Благодаря numeric_limits :: digits10 это довольно просто.

6
ответ дан 30 November 2019 в 02:10
поделиться

Для этого можно использовать статические утверждения Boost . Посмотрите на пример Использование в области имен .

5
ответ дан 30 November 2019 в 02:10
поделиться

Решение без буста состоит в том, чтобы определить массив следующим образом

char a[ 8 == sizeof(double) ];

Если значение типа double не 64-битное, тогда код будет выглядеть как

char a[0];

, что является ошибкой во время компиляции. Просто поместите соответствующий комментарий рядом с этой инструкцией.

4
ответ дан 30 November 2019 в 02:10
поделиться

См. в этом посте аналогичную проблему и утверждение без компиляции, называемое CCASSERT.

1
ответ дан 30 November 2019 в 02:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: