Неверный результат. Программа MPI в C [duplicate]

Использование str_replace () для удаления точек не является избыточным.

  $ string_number = '1.512.523,55';  // ПРИМЕЧАНИЕ. Вы действительно не должны использовать floatval () здесь, это просто, чтобы доказать, что это законное значение float.  $ number = floatval (str_replace (',', '.', str_replace ('.', '', $ string_number)));  // В этот момент $ number является «естественным» поплавком.  print $ number;   

Это почти наверняка наименее насыщенный CPU способ, которым вы можете это сделать, и вероятность того, что даже если вы используете какую-нибудь причудливую функцию для этого, что это то, что он делает под капотом .

2
задан ricky116 25 August 2013 в 02:16
поделиться

1 ответ

Короткий ответ: да, типы данных должны совпадать, но есть некоторые оговорки.

При использовании примитивных типов данных MPI, таких как MPI_INT и MPI_FLOAT, типы должны быть одинаковыми. Единственным исключением является MPI_PACKED, который может соответствовать любому другому типу.

При использовании производных типов данных (определяемых пользователем типов данных a.k.a.) все становится немного сложнее. Общий тип данных MPI состоит из двух элементов: сигнатуры типа, которая определяет базовые языковые типы данных, которые составляют производный тип данных, и последовательность смещений байтов, которые определяют, где эти базовые элементы находятся в памяти. Комбинация обеих последовательностей называется отображением типа типа данных. Примитивные типы данных MPI являются частными случаями таких общих типов данных, имеющих один базовый тип данных в сигнатуре типа с смещением 0, например. MPI_INT имеет следующую карту типов: { (int, 0) }. Для согласования операции отправки и получения подпись типа должна быть одинаковой с обеих сторон, но смещения могут различаться. Например. отправитель может отправить один MPI_Type_contiguous объект, состоящий из 3 MPI_FLOAT s, но приемник может получить это как MPI_Type_indexed тип 3 MPI_FLOAT s с произвольными смещениями. Отправитель может также предоставить массив из 3 MPI_FLOAT элементов, например. MPI_Send(buf, 3, MPI_FLOAT, ...), и это все равно приведет к сигнатуре того же типа.

Следует подчеркнуть, что подпись типа состоит только из базовых типов данных. Независимо от того, был ли определенный пользователем тип данных создан непосредственно из примитивных типов MPI или других определяемых пользователем типов данных (или их смесей), не имеет значения.

Пример: отправитель определяет MPI_Type_struct, состоящий из 3 MPI_INT s и 2 MPI_FLOAT s. Приемник определяет MPI_Type_contiguous, состоящий из 3 MPI_INT s (назовем этот тип A), другой MPI_Type_contiguous из 2 MPI_FLOAT s (тип B), а затем MPI_Type_struct, состоящий из 1 A и 1 B. Эти два типа данных будут совпадать, так как в конечном итоге они равны 3 int s, а затем 2 float s.

5
ответ дан Hristo Iliev 16 August 2018 в 02:16
поделиться
Другие вопросы по тегам:

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