Существует ли открытый исходный код c/c ++ реализация операций IEEE 754? [закрытый]

Я ищу ссылочную реализацию операций IEEE 754. Есть ли такая вещь?

14
задан zr. 2 February 2010 в 19:01
поделиться

3 ответа

Сначала необходимо разделить прочитанное здесь и там о транзакциях SQL Server на 2 отдельных случая: локальный и распределенный.

Локальные транзакции SQL :

  • SQL Server разрешает выполнение только одного запроса для каждой локальной транзакции.
  • По умолчанию только один сеанс может быть зарегистрирован в локальной транзакции. Использование sp_getbindtoken и sp_bindsession нескольких сеансов может быть зарегистрировано в локальной транзакции. Сеансы все еще ограничены только одним, выполняющим запрос в любое время.
  • С помощью нескольких активных результирующих наборов (MARS) один сеанс может выполнять несколько запросов. Все запросы должны быть зарегистрированы в одной локальной транзакции.

Распределенные транзакции :

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

Таким образом, когда клиент создает .Net TransacityScope и под этой областью транзакции выполняет несколько запросов на одном сервере, все эти запросы являются локальными транзакциями, зарегистрированными в распределенной транзакции. Простой пример:

class Program
    {
        static string sqlBatch = @"
set nocount on;
declare @i int;
set @i = 0;
while @i < 100000
begin
    insert into test (a) values (replicate('a',100));
    set @i = @i+1;
end";

        static void Main(string[] args)
        {
            try
            {
                TransactionOptions to = new TransactionOptions();
                to.IsolationLevel = IsolationLevel.ReadCommitted;
                using (TransactionScope scp = new TransactionScope(TransactionScopeOption.Required, to))
                {
                    using (SqlConnection connA = new SqlConnection(Settings.Default.connString))
                    {
                        connA.Open();
                        using (SqlConnection connB = new SqlConnection(Settings.Default.connString))
                        {
                            connB.Open();

                            SqlCommand cmdA = new SqlCommand(sqlBatch, connA);
                            SqlCommand cmdB = new SqlCommand(sqlBatch, connB);

                            IAsyncResult arA = cmdA.BeginExecuteNonQuery();
                            IAsyncResult arB = cmdB.BeginExecuteNonQuery();

                            WaitHandle.WaitAll(new WaitHandle[] { arA.AsyncWaitHandle, arB.AsyncWaitHandle });

                            cmdA.EndExecuteNonQuery(arA);
                            cmdB.EndExecuteNonQuery(arB);
                        }
                    }
                    scp.Complete();
                }
            }
            catch (Exception e)
            {
                Console.Error.Write(e);
            }
        }
    }

Создайте фиктивную тестовую таблицу

create table test (id int not null identity(1,1) primary key, a varchar(100));

и запустите код в образце. Вы увидите, что оба запроса выполняются параллельно, каждый из которых вставляет 100 000 строк в таблицу, затем оба фиксируют, когда область транзакции завершена. Таким образом, проблемы, которые вы видите, не связаны ни с SQL Server, ни с TransacityScope, они могут легко справиться с описанным сценарием. Более того, код очень прост и прост, и нет необходимости создавать зависимые транзакции, клонировать или продвигать транзакции.

Обновлено

Использование явных потоков и зависимых транзакций:

 private class ThreadState
    {
        public DependentTransaction Transaction {get; set;}
        public EventWaitHandle Done {get; set;}
        public SqlConnection Connection { get; set; }
    }
    static void Main(string[] args)
    {
        try
        {
            TransactionOptions to = new TransactionOptions();
            to.IsolationLevel = IsolationLevel.ReadCommitted;
            using (TransactionScope scp = new TransactionScope(TransactionScopeOption.Required, to))
            {
                ThreadState stateA = new ThreadState 
                {
                    Transaction = Transaction.Current.DependentClone(DependentCloneOption.BlockCommitUntilComplete),
                    Done = new AutoResetEvent(false),
                    Connection = new SqlConnection(Settings.Default.connString),
                };
                stateA.Connection.Open();
                ThreadState stateB = new ThreadState
                {
                    Transaction = Transaction.Current.DependentClone(DependentCloneOption.BlockCommitUntilComplete),
                    Done = new AutoResetEvent(false),
                    Connection = new SqlConnection(Settings.Default.connString),
                };
                stateB.Connection.Open();

                ThreadPool.QueueUserWorkItem(new WaitCallback(Worker), stateA);
                ThreadPool.QueueUserWorkItem(new WaitCallback(Worker), stateB);

                WaitHandle.WaitAll(new WaitHandle[] { stateA.Done, stateB.Done });

                scp.Complete();

                //TODO: dispose the open connections
            }

        }
        catch (Exception e)
        {
            Console.Error.Write(e);
        }
    }

    private static void Worker(object args)
    {
        Debug.Assert(args is ThreadState);
        ThreadState state = (ThreadState) args;
        try
        {
            using (TransactionScope scp = new TransactionScope(state.Transaction))
            {
                SqlCommand cmd = new SqlCommand(sqlBatch, state.Connection);
                cmd.ExecuteNonQuery();
                scp.Complete();
            }
            state.Transaction.Complete();
        }
        catch (Exception e)
        {
            Console.Error.WriteLine(e);
            state.Transaction.Rollback();
        }
        finally
        {
            state.Done.Set();
        }

    }
-121--4321020-

Можно ли добавить в файл Web.Config

<appSettings>
  <add key="GoogleMapAPI" value="XXXXXX" />
</appSettings>

для каждого домена

Затем добавить его на Страницу

<script type="text/javascript" src="http://maps.google.com/maps?file=api&v=2&key=<%=ConfigurationManager.ApplicationSettings["GoogleMapAPI"] %>&hl=de"

Можно создать нечто подобное с помощью базы данных или заголовков узлов для управления каждым ключом для каждого домена.

-121--3080540-

Я считаю, что библиотеки C SoftFloat и fdlibm подходят для того, что вы ищете. Другие включают Linux (GNU libc, glibc ) или * BSD libc математические функции . Наконец, CRlibm также должен представлять интерес для вас.

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

8
ответ дан 1 December 2019 в 15:12
поделиться

В теге < activity > в файле манифеста отсутствует следующее:

        <intent-filter . . . >
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

Для получения дополнительной информации см. здесь

-121--4268470-

Похоже на Silverlight 3.1, по крайней мере, это больше не является Я не могу воспроизвести его, во всяком случае.

-121--3960925-

Довольно запутанный вопрос; в C++ предполагается, что этот вид деталей обеспечивается аппаратным обеспечением или компилятором. Итак, в C++ сложение с плавающей запятой будет

float a = 1.0;
float b = 2.0;
float c = a + b;

я уверен, что это не то, что вы на самом деле имели в виду; возможно, вы выиграете от этой страницы , которая пытается эмулировать IEEE-754-compliant оборудование в javascript?

1
ответ дан 1 December 2019 в 15:12
поделиться

Должен вас разочаровать: их практически нет.

Хотя технически существуют системы, совместимые с IEEE-754, поскольку они не реализуют необязательные функции, описанные в стандарте, справочная реализация, разрешающая

  • доступ ко всем режимам округления
  • поддержка сигнализации NaN
  • поддержка перехвата всех пяти ловушек

не существует в стандартных языках. Это вызывает повторяющиеся проблемы Уильяма Кахана, главной силы, стоящей за стандартом и его адаптацией для процессоров Intel.

Я не знаю, есть ли какие-то эзотерические языки, которые поддерживают их, но я могу исключить Java, C #, C ++, Fortran.

РЕДАКТИРОВАТЬ: Несмотря на отсутствие поддержки компилятора, я советую реализацию Hausers SoftFloat , предоставленную mctylr. Хаузер знает, что делает.

http://portal.acm.org/citation.cfm?id=227699.227701&coll=portal&dl=ACM&CFID=77938829&CFTOKEN=18578907

3
ответ дан 1 December 2019 в 15:12
поделиться
Другие вопросы по тегам:

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