Kann erf, erff, etc. nicht finden beim Kompilieren mit 10.2



  • Doch diese sollten alle im Standard sein: std::erf, std::erff, std::erfl

    @aekeller: Schau mal in die cmath von deinem C++ Builder und suche mal nach erf. Evtl. mußt du noch ein Makro dafür setzen. Kompilierst du denn mit C++11 (oder höher)?

    Edit: Laut How to set C++ language standard in C++ Builder unterstützt C++ Builder 10.2 C++11 automatisch und erst ab 10.3 gibt es Compileroptionen für die verschiedenen Sprachstandards.



  • // exprtk_define_erf(      float,::erff)
       exprtk_define_erf(     double,::erf )
    // exprtk_define_erf(long double,::erfl)
    

    Das habe ich gemacht.... nun bin ich einen Schritt weiter:

    [ilink32 Error] Fatal: Exceeded memory limit for block Publics in module File2.cpp

    Und File2.cpp enthält:

    #pragma hdrstop
    #pragma argsused
    
    #ifdef _WIN32
    #include <tchar.h>
    #else
      typedef char _TCHAR;
      #define _tmain
    ``` main
    #endif
    
    using namespace std;
    #include "exprtk.hpp"
    
    template <typename T>
    void trig_function()
    {
       typedef exprtk::symbol_table<T> symbol_table_t;
       typedef exprtk::expression<T>     expression_t;
       typedef exprtk::parser<T>             parser_t;
    //
       const std::string expression_string =
                         "clamp(-1.0,sin(2 * pi * x) + cos(x / 2 * pi),+1.0)";
    
       T x;
    
       symbol_table_t symbol_table;
       symbol_table.add_variable("x",x);
       symbol_table.add_constants();
    
       expression_t expression;
       expression.register_symbol_table(symbol_table);
    
       parser_t parser;
       parser.compile(expression_string,expression);
    //
       for (x = T(-5); x <= T(+5); x += T(0.001))
       {
          const T y = expression.value();
          printf("%19.15f\t%19.15f\n", x, y);
       }
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    
       trig_function<double>();
       int result = 0;
    
       return result;
    }


  • Willkommen in der wunderbaren Embarcadero Welt ...
    Guck mal hier, da steht beschrieben, wie man dem Linker mehr Speicher zuteilen kann

    PS:
    Die Dinkumware STL Implementation ist wohl unvollständig, ich habe in xtgmath.h nur die Deklaration von erf und erfc gefunden. Ist mir bei ein paar anderen Funktionen aus cmath auch schon aufgefallen.



  • @DocShoe Vielen Dank für den Hinweis. Ich kann dem Linker mehr zuteilen. Doch es gibt keine Section für den "Block Publics".



  • @aekeller

    Schade zu hören 😞
    Die Embarcadero Suite ist und bleibt halt ein Stümperprodukt.



  • @DocShoe sagte in Kann erf, erff, etc. nicht finden beim Kompilieren mit 10.2:

    @aekeller

    Schade zu hören 😞
    Die Embarcadero Suite ist und bleibt halt ein Stümperprodukt.

    Tja, würde mal sagen, die Ideen sind gut, die Umsetzung jedoch leider wirklich stümperhaft, die IDE ist grauenhaft instabil (und immer noch nur in 32 Bit) und funktioniert wohl nur richtig mit sehr kleinen Projekten, sobald es mehr Dateien werden, funktioniert kein Codecompletion etc.

    Vermutlich haben einfach zu viele Entwickler daran gearbeitet, die nie lange geblieben sind.

    Gibt ja auch das Sprichwort "Zu viele Köche verderben den Brei."



  • @Burkhi sagte in [Kann erf, erff, etc. nicht finden beim Kompilieren mit 10.2](/forum

    Vermutlich haben einfach zu viele Entwickler daran gearbeitet, die nie lange geblieben sind.

    Sowas macht den Code nicht besser, das ist klar. Ist aber nicht nötig. Die meisten Entwickler haben das auch ganz gut drauf Programme zu verkacken an denen sie schon lange arbeiten.



  • Ich hätte zum Problem übrigens noch die Idee das was du davon brauchst mit einem anderen compiler hinter eine DLL mit C Api zu verpacken und die dann einzubinden. Wär ne Krücke, aber wenigstens etwas.
    Das wär jetzt meine "Quick and Dirty" idee.
    Alternativ immernoch das von hand fixen.



  • @5cript Die Idee der C-DLL ist zwar schon etwas ein Krücke, aber ein Versuch wert. Danke!



  • @Burkhi Ich arbeite seit Version 5 mit BCB. Es gibt sicher immer etwas Besseres. Mit der Instabilität lernt man umgehen. Wir haben bei uns sogar den Spruch - wenn wir am Debuggen sind und BCB abkackt: "I am getting close to the bug, builder just crashed"... Und tatsächlich, schon oft war das Problem kurz danach gefunden.

    Wir haben übrigens ein grosses und wunderbares Produkt bestehend aus 120 EXEs und DLLs und gut 3000 CPP-Dateien.