Тут размещают свои топики новички в С/С++.

Тема в разделе "LANGS.C", создана пользователем nitrotoluol, 4 мар 2007.

  1. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Relic
    В IDE это делается в Linker->Input->Additional Dependies
     
  2. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    как в С++ получить константу Pi ?
     
  3. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    GoldFinch
    например так:
    Код (Text):
    1. #include <cmath>
    2. ...
    3. double pi = 4.0 * std::atan(1.0);
    но я бы делал проще:
    Код (Text):
    1. double pi = 3.14159265358979323846;
     
  4. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    Код (Text):
    1. asm;
    2.     finit
    3.     fldpi
    4.     [...]
     
  5. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    GoldFinch
    у фпу(асм вставка) есть команда загрузки константы пи, а после выгружаеш её
    куда тебе надо в нужном формате

    опередили :)
     
  6. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    Получаем пи, как древние греки:
    Код (Text):
    1. float pi = 22/7;
    И никаких гвоздей :)
     
  7. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    beginner
    тогда уж лучше 355/113, или 75593/24062,..
     
  8. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Для VC можно использовать http://msdn.microsoft.com/en-us/library/4hwaceh6.aspx
     
  9. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    офигенно... даже в паскале есть функция pi, которая вроде как ассемблируется в fldpi
    а в си значит средствами языка нельзя скомпелить инструкцию процессора fldpi...

    какбэ я думаю все же есть разница между 80-битным значением загружающимся fldpi и тем что можно хранить в 32-битном float или 64-битном double.
    алсо fldpi - это 2 байта, а загрузка константы это много байт...
     
  10. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Угу, а ещё в Си нельзя средствами языка скомпилить какую-нибудь cmpxchg8b. Вообще-то Си - переносимый ЯВУ, область применения которого не ограничивается x86/x64 с сопроцессором.
     
  11. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    GoldFinch
    Непонимаю, зачем пытаться "заставлять" компилятор ЯВУ генерить какую-то инструкцию процессора. Нужна fldpi - пиши на асме.
     
  12. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    Код (Text):
    1. #define _USE_MATH_DEFINES
    2. #include <cmath> // for C++
    3. or
    4. #include <math.h> // for C
    5.  
    6. double x1 = M_PI;
    7. double x2 = M_PI_2;
    точнее там определены макросы:
    #define M_PI 3.14159265358979323846
    #define M_PI_2 1.57079632679489661923
    #define M_PI_4 0.785398163397448309616

    нафик извращаться с асм-вставками, когда все гораздо проще.
     
  13. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Я пишу программный модуль для 32-разрядного windows приложения. Зачем мне эта переносимость?
    При этом я раз уж я пишу на ЯВУ, я хочу чтобы компилятор либо сам компилировал мне нормальный код, либо чтобы язык предоставлял мне необходимые средства.
     
  14. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    GoldFinch
    это нужно для большего покрытия платформ
    и соответственно извлечения максимальной прибыли
     
  15. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    beginner
    А это не извращение, процессор выполнит кучу инструкций чтобы загрузить кудалибо(в стек fpu скорее всего) константу, которая уже в нём имеетсо :lol: %%%%_))))
     
  16. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    Код (Text):
    1. в дебаг версии:
    2.     double y = M_PI;
    3. 0041142F  fld         qword ptr [__real@400921fb54442d18 (415768h)]
    4. 00411435  fstp        qword ptr [y]
    5.  
    6. в релиз версии этого кода вообще нет изза оптимизации
    ох и дофига инструкций :)
     
  17. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    beginner
    тестовый пример должен выглядеть например так:
    __declspec(dllexport) double S(double r) {return pi*r*r;}

    в идеале должно получиться чтото вроде такого
    fld qword ptr [esp+4]
    fmul
    fldpi
    fmulp
     
  18. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    fldpi два байта занимает и никаких обращений к памяти.
     
  19. beginner

    beginner New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2008
    Сообщения:
    233
    Код (Text):
    1. y = M_PI*r*r;
    2. 00411438  fld         qword ptr [__real@400921fb54442d18 (415758h)]
    3. 0041143E  fmul        qword ptr [r]
    4. 00411441  fmul        qword ptr [r]
    5. 00411444  fstp        qword ptr [y]
    Пусть два байта, согласен, что не оптимально :)
    надо бить разработчиков студии :)
    но лично для меня такая разница не существенна.
     
  20. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    вот еще, про фпу...
    у меня компилятор при вызове функции 32-разрядные float'ы в стек кладет через fld dword ptr [x] / fstp dword ptr [esp+xx]
    это нормально?