### Tutorial: Improve Step 6

```* Print message when using the table
* Remove duplicated comment
* Remove HAVE_LOG and HAVE_EXP checks, use generated table instead```
parent df9cdf62
 ... ... @@ -43,10 +43,6 @@ if(USE_MYMATH) target_compile_definitions(MathFunctions PRIVATE "USE_MYMATH") if(HAVE_LOG AND HAVE_EXP) target_compile_definitions(SqrtLibrary PRIVATE "HAVE_LOG" "HAVE_EXP") endif() target_link_libraries(MathFunctions PRIVATE SqrtLibrary) endif() ... ...
 ... ... @@ -4,8 +4,6 @@ // include the generated table #include "Table.h" #include namespace mathfunctions { namespace detail { // a hack square root calculation using simple operations ... ... @@ -15,20 +13,13 @@ double mysqrt(double x) return 0; } // if we have both log and exp then use them #if defined(HAVE_LOG) && defined(HAVE_EXP) double result = exp(log(x) * 0.5); std::cout << "Computing sqrt of " << x << " to be " << result << " using log and exp" << std::endl; #else // use the table to help find an initial value double result = x; if (x >= 1 && x < 10) { std::cout << "Use the table to help find an initial value " << std::endl; result = sqrtTable[static_cast(x)]; } // if we have both log and exp then use them // do ten iterations for (int i = 0; i < 10; ++i) { if (result <= 0) { ... ... @@ -38,7 +29,7 @@ double mysqrt(double x) result = result + 0.5 * delta / result; std::cout << "Computing sqrt of " << x << " to be " << result << std::endl; } #endif return result; } } ... ...
 ... ... @@ -13,12 +13,6 @@ target_include_directories(MathFunctions option(USE_MYMATH "Use tutorial provided math implementation" ON) if(USE_MYMATH) # does this system provide the log and exp functions? include(CheckSymbolExists) set(CMAKE_REQUIRED_LIBRARIES "m") check_symbol_exists(log "math.h" HAVE_LOG) check_symbol_exists(exp "math.h" HAVE_EXP) # first we add the executable that generates the table add_executable(MakeTable MakeTable.cxx) ... ... @@ -44,10 +38,6 @@ if(USE_MYMATH) POSITION_INDEPENDENT_CODE \${BUILD_SHARED_LIBS} ) target_compile_definitions(SqrtLibrary PRIVATE "\$<\$:HAVE_LOG>" "\$<\$:HAVE_EXP>" ) target_link_libraries(MathFunctions PRIVATE SqrtLibrary) endif() ... ...
 ... ... @@ -4,8 +4,6 @@ // include the generated table #include "Table.h" #include namespace mathfunctions { namespace detail { // a hack square root calculation using simple operations ... ... @@ -15,12 +13,6 @@ double mysqrt(double x) return 0; } // if we have both log and exp then use them #if defined(HAVE_LOG) && defined(HAVE_EXP) double result = exp(log(x) * 0.5); std::cout << "Computing sqrt of " << x << " to be " << result << " using log and exp" << std::endl; #else // use the table to help find an initial value double result = x; if (x >= 1 && x < 10) { ... ... @@ -38,7 +30,7 @@ double mysqrt(double x) result = result + 0.5 * delta / result; std::cout << "Computing sqrt of " << x << " to be " << result << std::endl; } #endif return result; } } ... ...
 ... ... @@ -39,17 +39,6 @@ if(USE_MYMATH) target_compile_definitions(MathFunctions PRIVATE "USE_MYMATH") # does this system provide the log and exp functions? include(CheckSymbolExists) set(CMAKE_REQUIRED_LIBRARIES "m") check_symbol_exists(log "math.h" HAVE_LOG) check_symbol_exists(exp "math.h" HAVE_EXP) if(HAVE_LOG AND HAVE_EXP) target_compile_definitions(SqrtLibrary PRIVATE "HAVE_LOG" "HAVE_EXP") endif() target_link_libraries(MathFunctions PRIVATE SqrtLibrary) endif() ... ...
 ... ... @@ -4,8 +4,6 @@ // include the generated table #include "Table.h" #include namespace mathfunctions { namespace detail { // a hack square root calculation using simple operations ... ... @@ -15,20 +13,13 @@ double mysqrt(double x) return 0; } // if we have both log and exp then use them #if defined(HAVE_LOG) && defined(HAVE_EXP) double result = exp(log(x) * 0.5); std::cout << "Computing sqrt of " << x << " to be " << result << " using log and exp" << std::endl; #else // use the table to help find an initial value double result = x; if (x >= 1 && x < 10) { std::cout << "Use the table to help find an initial value " << std::endl; result = sqrtTable[static_cast(x)]; } // if we have both log and exp then use them // do ten iterations for (int i = 0; i < 10; ++i) { if (result <= 0) { ... ... @@ -38,7 +29,7 @@ double mysqrt(double x) result = result + 0.5 * delta / result; std::cout << "Computing sqrt of " << x << " to be " << result << std::endl; } #endif return result; } } ... ...
 ... ... @@ -40,10 +40,6 @@ if(USE_MYMATH) target_link_libraries(SqrtLibrary PUBLIC tutorial_compiler_flags) target_compile_definitions(MathFunctions PRIVATE "USE_MYMATH") if(HAVE_LOG AND HAVE_EXP) target_compile_definitions(SqrtLibrary PRIVATE "HAVE_LOG" "HAVE_EXP") endif() target_link_libraries(MathFunctions PRIVATE SqrtLibrary) endif() ... ...
 ... ... @@ -4,8 +4,6 @@ // include the generated table #include "Table.h" #include namespace mathfunctions { namespace detail { // a hack square root calculation using simple operations ... ... @@ -15,20 +13,13 @@ double mysqrt(double x) return 0; } // if we have both log and exp then use them #if defined(HAVE_LOG) && defined(HAVE_EXP) double result = exp(log(x) * 0.5); std::cout << "Computing sqrt of " << x << " to be " << result << " using log and exp" << std::endl; #else // use the table to help find an initial value double result = x; if (x >= 1 && x < 10) { std::cout << "Use the table to help find an initial value " << std::endl; result = sqrtTable[static_cast(x)]; } // if we have both log and exp then use them // do ten iterations for (int i = 0; i < 10; ++i) { if (result <= 0) { ... ...
 ... ... @@ -24,17 +24,6 @@ target_include_directories(MathFunctions PRIVATE \${CMAKE_CURRENT_BINARY_DIR} ) # does this system provide the log and exp functions? include(CheckSymbolExists) set(CMAKE_REQUIRED_LIBRARIES "m") check_symbol_exists(log "math.h" HAVE_LOG) check_symbol_exists(exp "math.h" HAVE_EXP) if(HAVE_LOG AND HAVE_EXP) target_compile_definitions(MathFunctions PRIVATE "HAVE_LOG" "HAVE_EXP") endif() # install rules install(TARGETS MathFunctions DESTINATION lib) install(FILES MathFunctions.h DESTINATION include)
 ... ... @@ -4,8 +4,6 @@ // include the generated table #include "Table.h" #include // a hack square root calculation using simple operations double mysqrt(double x) { ... ... @@ -16,6 +14,7 @@ double mysqrt(double x) // use the table to help find an initial value double result = x; if (x >= 1 && x < 10) { std::cout << "Use the table to help find an initial value " << std::endl; result = sqrtTable[static_cast(x)]; } ... ...
 ... ... @@ -24,17 +24,6 @@ target_include_directories(MathFunctions PRIVATE \${CMAKE_CURRENT_BINARY_DIR} ) # does this system provide the log and exp functions? include(CheckSymbolExists) set(CMAKE_REQUIRED_LIBRARIES "m") check_symbol_exists(log "math.h" HAVE_LOG) check_symbol_exists(exp "math.h" HAVE_EXP) if(HAVE_LOG AND HAVE_EXP) target_compile_definitions(MathFunctions PRIVATE "HAVE_LOG" "HAVE_EXP") endif() # install rules install(TARGETS MathFunctions DESTINATION lib) install(FILES MathFunctions.h DESTINATION include)
 ... ... @@ -4,8 +4,6 @@ // include the generated table #include "Table.h" #include // a hack square root calculation using simple operations double mysqrt(double x) { ... ... @@ -13,20 +11,13 @@ double mysqrt(double x) return 0; } // if we have both log and exp then use them #if defined(HAVE_LOG) && defined(HAVE_EXP) double result = exp(log(x) * 0.5); std::cout << "Computing sqrt of " << x << " to be " << result << " using log and exp" << std::endl; #else // use the table to help find an initial value double result = x; if (x >= 1 && x < 10) { std::cout << "Use the table to help find an initial value " << std::endl; result = sqrtTable[static_cast(x)]; } // if we have both log and exp then use them // do ten iterations for (int i = 0; i < 10; ++i) { if (result <= 0) { ... ... @@ -36,6 +27,6 @@ double mysqrt(double x) result = result + 0.5 * delta / result; std::cout << "Computing sqrt of " << x << " to be " << result << std::endl; } #endif return result; }
 ... ... @@ -26,17 +26,6 @@ target_include_directories(MathFunctions # and that anything that links to use will get this define target_compile_definitions(MathFunctions INTERFACE "USE_MYMATH") # does this system provide the log and exp functions? include(CheckSymbolExists) set(CMAKE_REQUIRED_LIBRARIES "m") check_symbol_exists(log "math.h" HAVE_LOG) check_symbol_exists(exp "math.h" HAVE_EXP) if(HAVE_LOG AND HAVE_EXP) target_compile_definitions(MathFunctions PRIVATE "HAVE_LOG" "HAVE_EXP") endif() # install rules install(TARGETS MathFunctions DESTINATION lib) install(FILES MathFunctions.h DESTINATION include)
 ... ... @@ -4,8 +4,6 @@ // include the generated table #include "Table.h" #include // a hack square root calculation using simple operations double mysqrt(double x) { ... ... @@ -13,20 +11,13 @@ double mysqrt(double x) return 0; } // if we have both log and exp then use them #if defined(HAVE_LOG) && defined(HAVE_EXP) double result = exp(log(x) * 0.5); std::cout << "Computing sqrt of " << x << " to be " << result << " using log and exp" << std::endl; #else // use the table to help find an initial value double result = x; if (x >= 1 && x < 10) { std::cout << "Use the table to help find an initial value " << std::endl; result = sqrtTable[static_cast(x)]; } // if we have both log and exp then use them // do ten iterations for (int i = 0; i < 10; ++i) { if (result <= 0) { ... ... @@ -36,6 +27,6 @@ double mysqrt(double x) result = result + 0.5 * delta / result; std::cout << "Computing sqrt of " << x << " to be " << result << std::endl; } #endif return result; }