<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Script Programming(스크립트 프로그래밍)</title>
    <link>https://scripting.tistory.com/</link>
    <description>본격적인 애플리케이션 개발에 앞서 미리 빠르게 작성하고 테스트하는데는 스크립팅 언어가 제격이다. 이 블로그는 스크립팅 언어의 프로그래밍 능력을 단 시간에 향상시키는 것을 돕기 위해 개설되었다.</description>
    <language>ko</language>
    <pubDate>Sat, 16 May 2026 16:59:19 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Scripter</managingEditor>
    <image>
      <title>Script Programming(스크립트 프로그래밍)</title>
      <url>https://t1.daumcdn.net/cfile/tistory/27326A3B58DB4C8D29</url>
      <link>https://scripting.tistory.com</link>
    </image>
    <item>
      <title>tommath library 사용하여 g++, gcc, cl, clang-cl, clang++ 등으로 컴파일 할 때, 에러메시지 해결하기</title>
      <link>https://scripting.tistory.com/863</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;[1] 테스트용 소스 파일 test_main.cpp 의 내용&lt;/b&gt;&lt;/u&gt;&lt;b&gt;:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1777785291255&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;tommath.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;

int main() {
    mp_int num;
    mp_init(&amp;amp;num);
    mp_set_int(&amp;amp;num, 12345);
    printf(&quot;Number: %d\n&quot;, mp_get_int(&amp;amp;num));
    mp_clear(&amp;amp;num);
    return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;[2] 컴파일하기&lt;/b&gt;&lt;/u&gt;:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ g++ test_main.cpp -o test_main -ltommath&amp;nbsp;&lt;br /&gt;test_main .cpp: In function 'int main()': &lt;br /&gt;test_main .cpp:7:15: warning: 'mp_err mp_set_int(mp_int*, long unsigned int)' is deprecated: replaced by mp_set_ul [-Wdeprecated-declarations] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mp_set_int(&amp;amp;num,&amp;nbsp;12345); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;~~~~~~~~~~^~~~~~~~~~~~~ &lt;br /&gt;In&amp;nbsp;file&amp;nbsp;included&amp;nbsp;from&amp;nbsp;test_tommath_cpp_001.cpp:1: &lt;br /&gt;include/tommath.h:359:33:&amp;nbsp;note:&amp;nbsp;declared&amp;nbsp;here &lt;br /&gt;&amp;nbsp;&amp;nbsp;359&amp;nbsp;|&amp;nbsp;MP_DEPRECATED(mp_set_ul)&amp;nbsp;mp_err&amp;nbsp;mp_set_int(mp_int&amp;nbsp;*a,&amp;nbsp;unsigned&amp;nbsp;long&amp;nbsp;b); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;^~~~~~~~~~ &lt;br /&gt;test_tommath_cpp_001.cpp:8:38:&amp;nbsp;warning:&amp;nbsp;'long&amp;nbsp;unsigned&amp;nbsp;int&amp;nbsp;mp_get_int(const&amp;nbsp;mp_int*)'&amp;nbsp;is&amp;nbsp;deprecated:&amp;nbsp;replaced&amp;nbsp;by&amp;nbsp;mp_get_mag_u32/mp_get_u32&amp;nbsp;[-Wdeprecated-declarations] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf(&quot;Number:&amp;nbsp;%d\n&quot;,&amp;nbsp;mp_get_int(&amp;amp;num)); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;~~~~~~~~~~^~~~~~ &lt;br /&gt;include/tommath.h:356:56:&amp;nbsp;note:&amp;nbsp;declared&amp;nbsp;here &lt;br /&gt;&amp;nbsp;&amp;nbsp;356&amp;nbsp;|&amp;nbsp;MP_DEPRECATED(mp_get_mag_u32/mp_get_u32)&amp;nbsp;unsigned&amp;nbsp;long&amp;nbsp;mp_get_int(const&amp;nbsp;mp_int&amp;nbsp;*a)&amp;nbsp;MP_WUR; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;^~~~~~~~~~ &lt;br /&gt;test_tommath_cpp_001.cpp:6:12:&amp;nbsp;warning:&amp;nbsp;ignoring&amp;nbsp;return&amp;nbsp;value&amp;nbsp;of&amp;nbsp;'mp_err&amp;nbsp;mp_init(mp_int*)'&amp;nbsp;declared&amp;nbsp;with&amp;nbsp;attribute&amp;nbsp;'warn_unused_result'&amp;nbsp;[-Wunused-result] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mp_init(&amp;amp;num); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;~~~~~~~^~~~~~&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;u&gt;[3] 수정된 소스 파일 test_main.cpp 의 내용&lt;/u&gt;:&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1777785765774&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;tommath.h&amp;gt;

int main() {
    mp_int num;
    mp_err err_n = mp_init(&amp;amp;num);
    mp_set_i32(&amp;amp;num, 12345);   // &amp;lt;==  mp_set_int(&amp;amp;num, 12345);
    printf(&quot;Number: %d\n&quot;, mp_get_i32(&amp;amp;num));  // &amp;lt;== printf(&quot;Number: %d\n&quot;, mp_get_int(&amp;amp;num));
    mp_clear(&amp;amp;num);
    return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;u&gt;[4] 수정된 소스 파일 test_main.cpp 컴파일하기&lt;/u&gt;:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ g++ test_main.cpp -o test_main -ltommath&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;u&gt;[5] 생성된 실핼파일 test_main 을 실행한 결과 &lt;/u&gt;:&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ ./test_main&lt;br /&gt;Number:&amp;nbsp;12345&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍/C</category>
      <author>Scripter</author>
      <guid isPermaLink="true">https://scripting.tistory.com/863</guid>
      <comments>https://scripting.tistory.com/863#entry863comment</comments>
      <pubDate>Sun, 3 May 2026 14:12:48 +0900</pubDate>
    </item>
    <item>
      <title>g++ 컴파일러로 int128 정수와 float128 부동소수점수 사용하기</title>
      <link>https://scripting.tistory.com/862</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;소스 파일명 : int128_example.cpp&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;* 수정 전의 원본 소스는&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a style=&quot;color: #0070d1; text-align: start;&quot; title=&quot;int128_example.cpp 원본 소스&quot; href=&quot;https://gcc.gnu.org/onlinedocs/gcc-9.1.0/libquadmath/quadmath_005fsnprintf.html#quadmath_005fsnprintf&quot;&gt;여기&lt;/a&gt;서 구할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;컴파일하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$ g++ -o int128_example int128_example.cpp -fexceptions -std=gnu++17 -g -fext-numeric-literals -fpermissive -lquadmath&lt;/p&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;int128 정수(128비트 부호 있는 정수) 사용하는 예제&lt;/h4&gt;
&lt;pre id=&quot;code_1747026853186&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;quadmath.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;

int main ()
{
  __float128 r;
  int prec = 20;
  int width = 46;
  char buf[128];

  r = 2.0q;
  r = sqrtq (r);
  int n = quadmath_snprintf (buf, sizeof buf, &quot;%+-#*.20Qe&quot;, width, r);
  if ((size_t) n &amp;lt; sizeof buf)
    printf (&quot;%s\n&quot;, buf);
    /* Prints: +1.41421356237309504880e+00 */
  quadmath_snprintf (buf, sizeof buf, &quot;%Qa&quot;, r);
  if ((size_t) n &amp;lt; sizeof buf)
    printf (&quot;%s\n&quot;, buf);
    /* Prints: 0x1.6a09e667f3bcc908b2fb1366ea96p+0 */
  n = quadmath_snprintf (NULL, 0, &quot;%+-#46.*Qe&quot;, prec, r);
  if (n &amp;gt; -1)
    {
      char *str = (char *) malloc (n + 1);
      if (str)
        {
          quadmath_snprintf (str, n + 1, &quot;%+-#46.*Qe&quot;, prec, r);
          printf (&quot;%s\n&quot;, str);
          /* Prints: +1.41421356237309504880e+00 */
        }
      free (str);
    }
  return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;float128 부동소수점수(128비트 부동소수점수 ) 사용하는 예제&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;* 소스 파일명 : float128_example.cpp&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;* 수정 전의 원본 소스는&amp;nbsp; &lt;a title=&quot;여기(float128_example.cpp 원본 소스)&quot; href=&quot;http:////www.boost.org/doc/libs/1_82_0/libs/math/example/float128_example.cpp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기&lt;/a&gt;서&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;224행. 225행,&amp;nbsp; 226행&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;//std::cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;tifu128.name()&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;std::endl;&amp;nbsp;//&amp;nbsp;On&amp;nbsp;GCC,&amp;nbsp;aborts&amp;nbsp;(because&amp;nbsp;not&amp;nbsp;printable&amp;nbsp;string). &lt;br /&gt;//std::cout&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;typeid(__float128).name()&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;std::endl;&amp;nbsp;//&amp;nbsp;Aborts&amp;nbsp;- &lt;br /&gt;//&amp;nbsp;&amp;nbsp;string&amp;nbsp;name&amp;nbsp;cannot&amp;nbsp;be&amp;nbsp;output.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;을 아래의 두 행으로 바꾸고&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;std::cout &amp;lt;&amp;lt; &quot;&amp;nbsp;&amp;nbsp;tifu128.name() = &quot; &amp;lt;&amp;lt; tifu128.name() &amp;lt;&amp;lt; std::endl;&amp;nbsp;&lt;br /&gt;std::cout &amp;lt;&amp;lt; &quot;&amp;nbsp;&amp;nbsp;typeid(__float128).name() = &quot; &amp;lt;&amp;lt; typeid(__float128).name() &amp;lt;&amp;lt; std::endl;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아래 처럼 g++ 컴파일 명령으로 컴파일하면 (경고 없이) 컴파일됩니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;* 컴파일하기&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;$ g++ -o float128_example.exe float128_example.cpp -I$BOOST_PATH -fexceptions -std=gnu++17 -g -fext-numeric-literals -fpermissive -lquadmath -Wunused-variable&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1747027489082&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//  Copyright John Maddock 2016
//  Copyright Christopher Kormanyos 2016.
//  Copyright Paul A. Bristow 2016.

//  Use, modification and distribution are subject to the
//  Boost Software License, Version 1.0. (See accompanying file
//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

// Contains Quickbook snippets as C++ comments - do not remove.

// http://gcc.gnu.org/onlinedocs/libquadmath/ GCC Quad-Precision Math Library
// https://en.wikipedia.org/wiki/Quadruple-precision_floating-point_format

// https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html#C_002b_002b-Dialect-Options GNU 3.5 Options Controlling C++ Dialect
// https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#C-Dialect-Options 3.4 Options Controlling C Dialect

//[float128_includes_1

#include &amp;lt;boost/cstdfloat.hpp&amp;gt; // For float_64_t, float128_t. Must be first include!
//#include &amp;lt;boost/config.hpp&amp;gt;
#include &amp;lt;boost/multiprecision/float128.hpp&amp;gt;
#include &amp;lt;boost/math/special_functions.hpp&amp;gt; // For gamma function.
#include &amp;lt;boost/math/constants/constants.hpp&amp;gt; // For constants pi, e ...
#include &amp;lt;typeinfo&amp;gt; //

#include &amp;lt;cmath&amp;gt;  // for pow function.

// #include &amp;lt;quadmath.h&amp;gt;
// C:\program files\gcc-6-win64\lib\gcc\x86_64-w64-mingw32\6.1.1\include\quadmath.h

// i:\modular-boost\boost\multiprecision\float128.hpp|210|  undefined reference to `quadmath_snprintf'.

//] [/float128_includes_1]

//[float128_dialect_1
/*`To make float128 available it is vital to get the dialect and options on the command line correct.

Quad type is forbidden by all the strict C++ standards, so using or adding -std=c++11 and later standards will prevent its use.
so explicitly use -std=gnu++11, 1y, 14, 17, or 1z or ...

For GCC 6.1.1, for example, the default is if no C++ language dialect options are given, is -std=gnu++14.

See https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#C-Dialect-Options
https://gcc.gnu.org/onlinedocs/gcc/Standards.html#Standards 2 Language Standards Supported by GCC

 g++.exe -Wall -fexceptions -std=gnu++17 -g -fext-numeric-literals -fpermissive -lquadmath
  -II:\modular-boost\libs\math\include -Ii:\modular-boost -c J:\Cpp\float128\float128\float128_example.cpp -o obj\Debug\float128_example.o

Requires GCC linker option -lquadmath

If this is missing, then get errors like:

  \modular-boost\boost\multiprecision\float128.hpp|210|undefined reference to `quadmath_snprintf'|
  \modular-boost\boost\multiprecision\float128.hpp|351|undefined reference to `sqrtq'|

Requires compile option

  -fext-numeric-literals

If missing, then get errors like:

\modular-boost\libs\math\include/boost/math/cstdfloat/cstdfloat_types.hpp:229:43: error: unable to find numeric literal operator 'operator&quot;&quot;Q'

A successful build log was:

  g++.exe -Wall -std=c++11 -fexceptions -std=gnu++17 -g -fext-numeric-literals -II:\modular-boost\libs\math\include -Ii:\modular-boost -c J:\Cpp\float128\float128\float128_example.cpp -o obj\Debug\float128_example.o
  g++.exe  -o bin\Debug\float128.exe obj\Debug\float128_example.o  -lquadmath
*/

//] [/float128_dialect_1]

void show_versions(std::string title)
{
  std::cout &amp;lt;&amp;lt; title &amp;lt;&amp;lt; std::endl;

  std::cout &amp;lt;&amp;lt; &quot;Platform: &quot; &amp;lt;&amp;lt; BOOST_PLATFORM &amp;lt;&amp;lt; '\n'
    &amp;lt;&amp;lt; &quot;Compiler: &quot; &amp;lt;&amp;lt; BOOST_COMPILER &amp;lt;&amp;lt; '\n'
    &amp;lt;&amp;lt; &quot;STL     : &quot; &amp;lt;&amp;lt; BOOST_STDLIB &amp;lt;&amp;lt; '\n'
    &amp;lt;&amp;lt; &quot;Boost   : &quot; &amp;lt;&amp;lt; BOOST_VERSION / 100000 &amp;lt;&amp;lt; &quot;.&quot;
    &amp;lt;&amp;lt; BOOST_VERSION / 100 % 1000 &amp;lt;&amp;lt; &quot;.&quot;
    &amp;lt;&amp;lt; BOOST_VERSION % 100
    &amp;lt;&amp;lt; std::endl;
#ifdef _MSC_VER
  std::cout &amp;lt;&amp;lt; &quot;_MSC_FULL_VER = &quot; &amp;lt;&amp;lt; _MSC_FULL_VER &amp;lt;&amp;lt; std::endl; // VS 2015 190023026
#if defined _M_IX86
  std::cout &amp;lt;&amp;lt; &quot;(x86)&quot; &amp;lt;&amp;lt; std::endl;
#endif
#if defined _M_X64
  std::cout &amp;lt;&amp;lt; &quot; (x64)&quot; &amp;lt;&amp;lt; std::endl;
#endif
#if defined _M_IA64
  std::cout &amp;lt;&amp;lt; &quot; (Itanium)&quot; &amp;lt;&amp;lt; std::endl;
#endif
  // Something very wrong if more than one is defined (so show them in all just in case)!
#endif // _MSC_VER
#ifdef __GNUC__
//PRINT_MACRO(__GNUC__);
//PRINT_MACRO(__GNUC_MINOR__);
//PRINT_MACRO(__GNUC_PATCH__);
std::cout &amp;lt;&amp;lt; &quot;GCC &quot; &amp;lt;&amp;lt; __VERSION__  &amp;lt;&amp;lt; std::endl;
//PRINT_MACRO(LONG_MAX);
#endif // __GNUC__
  return;
} // void show_version(std::string title)

int main()
{
  try
  {

//[float128_example_3
// Always use try'n'catch blocks to ensure any error messages are displayed.
//`Ensure that all possibly significant digits (17) including trailing zeros are shown.

    std::cout.precision(std::numeric_limits&amp;lt;boost::float64_t&amp;gt;::max_digits10);
    std::cout.setf(std::ios::showpoint); // Show all significant trailing zeros.
 //] [/ float128_example_3]

#ifdef BOOST_FLOAT128_C
  std::cout &amp;lt;&amp;lt; &quot;Floating-point type boost::float128_t is available.&quot; &amp;lt;&amp;lt; std::endl;
    std::cout &amp;lt;&amp;lt; &quot;  std::numeric_limits&amp;lt;boost::float128_t&amp;gt;::digits10 == &quot;
    &amp;lt;&amp;lt; std::numeric_limits&amp;lt;boost::float128_t&amp;gt;::digits10 &amp;lt;&amp;lt; std::endl;
  std::cout &amp;lt;&amp;lt; &quot;  std::numeric_limits&amp;lt;boost::float128_t&amp;gt;::max_digits10 == &quot;
    &amp;lt;&amp;lt; std::numeric_limits&amp;lt;boost::float128_t&amp;gt;::max_digits10 &amp;lt;&amp;lt; std::endl;
#else
  std::cout &amp;lt;&amp;lt; &quot;Floating-point type boost::float128_t is NOT available.&quot; &amp;lt;&amp;lt; std::endl;
#endif

  show_versions(&quot;&quot;);

  using boost::multiprecision::float128;  // Wraps, for example, __float128 or _Quad.
  // or
  //using namespace boost::multiprecision;

  std::cout.precision(std::numeric_limits&amp;lt;float128&amp;gt;::max_digits10);  // Show all potentially meaningful digits.
  std::cout.setf(std::ios::showpoint); // Show all significant trailing zeros.

  // float128 pi0 = boost::math::constants::pi(); // Compile fails - need to specify a type for the constant!

  float128 pi1 = boost::math::constants::pi&amp;lt;float128&amp;gt;();  // Returns a constant of type float128.
  std::cout &amp;lt;&amp;lt; sqrt(pi1) &amp;lt;&amp;lt; std::endl; // 1.77245385090551602729816748334114514

  float128 pi2 = boost::math::constants::pi&amp;lt;__float128&amp;gt;(); // Constant of type __float128 gets converted to float128 on the assignment.
  std::cout &amp;lt;&amp;lt; sqrt(pi2) &amp;lt;&amp;lt; std::endl; // 1.77245385090551602729816748334114514

  // DIY decimal digit literal constant, with suffix Q.
  float128 pi3 = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348Q;
  std::cout &amp;lt;&amp;lt; sqrt(pi3) &amp;lt;&amp;lt; std::endl; // 1.77245385090551602729816748334114514

  // Compare to ready-rolled sqrt(pi) constant from Boost.Math:
  std::cout &amp;lt;&amp;lt; boost::math::constants::root_pi&amp;lt;float128&amp;gt;() &amp;lt;&amp;lt; std::endl; // 1.77245385090551602729816748334114514

   // DIY decimal digit literal constant, without suffix Q, suffering seventeen silent digits loss of precision!
  float128 pi4 = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348;
  std::cout &amp;lt;&amp;lt; sqrt(pi4) &amp;lt;&amp;lt; std::endl; // 1.77245385090551599275151910313924857

  // float128 variables constructed from a quad-type literal can be declared constexpr if required:

#ifndef BOOST_NO_CXX11_CONSTEXPR
  constexpr float128 pi_constexpr = 3.1415926535897932384626433832795028841971693993751058Q;
#endif
  std::cout &amp;lt;&amp;lt; pi_constexpr &amp;lt;&amp;lt; std::endl; // 3.14159265358979323846264338327950280

  // But sadly functions like sqrt are not yet available constexpr for float128.

  // constexpr float128 root_pi_constexpr = sqrt(pi_constexpr);  // Fails - not constexpr (yet).
  // constexpr float128 root_pi_constexpr = std::sqrt(pi_constexpr);  // Fails - no known conversion for argument 1 from 'const float128'.
  // constexpr float128 root_pi_constexpr = sqrt(pi_constexpr); // Call to non-constexpr
  // constexpr float128 root_pi_constexpr = boost::math::constants::root_pi(); // Missing type for constant.

  // Best current way to get a constexpr is to use a Boost.Math constant if one is available.
  constexpr float128 root_pi_constexpr = boost::math::constants::root_pi&amp;lt;float128&amp;gt;();
  std::cout &amp;lt;&amp;lt; root_pi_constexpr &amp;lt;&amp;lt; std::endl; // 1.77245385090551602729816748334114514

  // Note that casts within the sqrt call are NOT NEEDED (nor allowed),
  // since all the variables are the correct type to begin with.
  // std::cout &amp;lt;&amp;lt; sqrt&amp;lt;float128&amp;gt;(pi3) &amp;lt;&amp;lt; std::endl;
  // But note examples of catastrophic (but hard to see) loss of precision below.

  // Note also that the library functions, here sqrt, is NOT defined using std::sqrt,
  // so that the correct overload is found using Argument Dependent LookUp (ADL).

  float128 ee = boost::math::constants::e&amp;lt;float128&amp;gt;();
   std::cout &amp;lt;&amp;lt; ee &amp;lt;&amp;lt; std::endl;  // 2.71828182845904523536028747135266231

  float128 e1 = exp(1.Q); // Note argument to exp is type float128.
  std::cout &amp;lt;&amp;lt; e1 &amp;lt;&amp;lt; std::endl; // 2.71828182845904523536028747135266231

  // Beware - it is all too easy to silently get a much lower precision by mistake.

  float128 e1d = exp(1.); // Caution - only double 17 decimal digits precision!
  std::cout &amp;lt;&amp;lt; e1d &amp;lt;&amp;lt; std::endl; // 2.71828182845904509079559829842764884

  float128 e1i = exp(1); // Caution int promoted to double so only 17 decimal digits precision!
  std::cout &amp;lt;&amp;lt; e1i &amp;lt;&amp;lt; std::endl; // 2.71828182845904509079559829842764884

  float f1 = 1.F;
  float128 e1f = exp(f1); // Caution float so only 6 decimal digits precision out of 36!
  std::cout &amp;lt;&amp;lt; e1f &amp;lt;&amp;lt; std::endl; // 2.71828174591064453125000000000000000

  // In all these cases you get what you asked for and not what you expected or wanted.

  // Casting is essential if you start with a lower precision type.

  float128 e1q = exp(static_cast&amp;lt;float128&amp;gt;(f1)); // Full 36 decimal digits precision!
  std::cout &amp;lt;&amp;lt; e1q &amp;lt;&amp;lt; std::endl; // 2.71828182845904523536028747135266231

  float128 e1qc = exp((float128)f1); // Full 36 decimal digits precision!
  std::cout &amp;lt;&amp;lt; e1qc &amp;lt;&amp;lt; std::endl; // 2.71828182845904523536028747135266231

  float128 e1qcc = exp(float128(f1)); // Full 36 decimal digits precision!
  std::cout &amp;lt;&amp;lt; e1qcc &amp;lt;&amp;lt; std::endl; // 2.71828182845904523536028747135266231

  //float128 e1q = exp&amp;lt;float128&amp;gt;(1.); // Compile fails.
  // std::cout &amp;lt;&amp;lt; e1q &amp;lt;&amp;lt; std::endl; //

// http://en.cppreference.com/w/cpp/language/typeid
// The name()is implementation-dependent mangled, and may not be able to be output.
// The example showing output using one of the implementations where type_info::name prints full type names;
// filter through c++filt -t if using gcc or similar.

//[float128_type_info
const std::type_info&amp;amp; tifu128 = typeid(__float128); // OK.
std::cout &amp;lt;&amp;lt; &quot;  tifu128.name() = &quot; &amp;lt;&amp;lt; tifu128.name() &amp;lt;&amp;lt; std::endl;
std::cout &amp;lt;&amp;lt; &quot;  typeid(__float128).name() = &quot; &amp;lt;&amp;lt; typeid(__float128).name() &amp;lt;&amp;lt; std::endl; 

const std::type_info&amp;amp; tif128 = typeid(float128); // OK.
std::cout &amp;lt;&amp;lt; tif128.name() &amp;lt;&amp;lt; std::endl; // OK.
std::cout &amp;lt;&amp;lt; typeid(float128).name() &amp;lt;&amp;lt; std::endl; // OK.

const std::type_info&amp;amp; tpi = typeid(pi1); // OK using GCC 6.1.1.
// (from GCC 5 according to http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43622)
std::cout &amp;lt;&amp;lt; tpi.name() &amp;lt;&amp;lt; std::endl; // OK, Output implementation-dependent mangled name:

// N5boost14multiprecision6numberINS0_8backends16float128_backendELNS0_26expression_template_optionE0EEE

//] [/float128_type_info]

  }
  catch (std::exception ex)
  { // Display details about why any exceptions are thrown.
    std::cout &amp;lt;&amp;lt; &quot;Thrown exception &quot; &amp;lt;&amp;lt; ex.what() &amp;lt;&amp;lt; std::endl;
  }
} // int main()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.boost.org/LICENSE_1_0.txt&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;BOOST Liscense&lt;/a&gt;&lt;/p&gt;</description>
      <category>프로그래밍/C++</category>
      <category>boost</category>
      <category>float128</category>
      <category>g++</category>
      <category>GCC</category>
      <category>int128</category>
      <author>Scripter</author>
      <guid isPermaLink="true">https://scripting.tistory.com/862</guid>
      <comments>https://scripting.tistory.com/862#entry862comment</comments>
      <pubDate>Mon, 12 May 2025 14:18:20 +0900</pubDate>
    </item>
    <item>
      <title>수학 문제 쉽게 풀기 (사칙연산, 방정식 풀이, 수열과 급수, 극한, 미적분, ...)</title>
      <link>https://scripting.tistory.com/860</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 링크를 따라가서 알고 싶은 수학식만 적어주면 풀이과정과 답을 알려줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대수,&amp;nbsp; 기하,&amp;nbsp; 그래프, 곡선, 극한, 유한급수와, 무한급수, 미분과 적분, 해석, 위상, 확룰,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실함수와, 복소함수, 멱급수(power series), 확룰(probability)과 측도(measure), ...&amp;nbsp; 뭐든지 다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.symbolab.com/solver/indefinite-integral-calculator/%5Cint%20e%5Ex%5Ccos%20%28x%29dx?or=ex&quot;&gt;integral of e^xcos (x)&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1738652068370&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;integral of e^xcos (x)&quot; data-og-description=&quot;Free Online indefinite integral calculator - solve indefinite integrals with all the steps. Type in any integral to get the solution, steps and graph&quot; data-og-host=&quot;www.symbolab.com&quot; data-og-source-url=&quot;https://www.symbolab.com/solver/indefinite-integral-calculator/%5Cint%20e%5Ex%5Ccos%20%28x%29dx?or=ex&quot; data-og-url=&quot;https://www.symbolab.com/solver/indefinite-integral-calculator/%5Cint%20e%5Ex%5Ccos%20%28x%29dx?or=ex&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.symbolab.com/solver/indefinite-integral-calculator/%5Cint%20e%5Ex%5Ccos%20%28x%29dx?or=ex&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.symbolab.com/solver/indefinite-integral-calculator/%5Cint%20e%5Ex%5Ccos%20%28x%29dx?or=ex&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;integral of e^xcos (x)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Free Online indefinite integral calculator - solve indefinite integrals with all the steps. Type in any integral to get the solution, steps and graph&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.symbolab.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>학습/수학</category>
      <author>Scripter</author>
      <guid isPermaLink="true">https://scripting.tistory.com/860</guid>
      <comments>https://scripting.tistory.com/860#entry860comment</comments>
      <pubDate>Tue, 4 Feb 2025 15:55:09 +0900</pubDate>
    </item>
    <item>
      <title>카라츄바 곱셈(Karatsuba multiplication) 에 대한 어떤 생각</title>
      <link>https://scripting.tistory.com/857</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;정수의 곱셈을 빨리하기 위한 방법 중의 하나로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기수법으로 표현된 정수를 여러 조각으로 분할하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;덧셈이나 뺄셈 회수는 몇회 증가하는 대신, 곱셈 횟수를 몇회 감소하는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방법입니다. 곱셈이 덧셈이나 뺄셈 보다는 시간이 많이 걸린다는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전제 하에 카라츄바&amp;nbsp;곱셈(Karatsuba multiplication)을 적용하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간복잡도 O(N**2) 의 계산 과정을 을 약 시간복잡도 O(N*&amp;amp;1.5)의 계산 과정으로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;줄일 수 있습니다.&amp;nbsp; (여기서 N은 기수법으로 표현된 정수의 분할 개수입니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어&amp;nbsp; 두 자리 십진법 수 23과 45의 곱셈 23*45을 생각해 봅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(이 경우 N = 2 입니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;html xml&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;                  2  3
          x )     4  5
            -----------
                  1  5
               1  0
               1  2
               8
            -----------
            1  0  3  5&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 곱셈표에서 보듯이,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;곱셈은 3*5 = 15, 2*5 = 10, 3*4 = 12, 2*4 = 8 로 모두 4회입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;덧셈은 15 + 10 + 12 + 8 로 모두 3회입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러므로.&amp;nbsp; &amp;nbsp;곱셈 회수 + 덧셈 회수 = 4(회) + 3(회) = 7(회) 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;덧셈이나 뺄셈을 한 후에 곱셈을 할 때는 분배법칙(혹은 배분법칙)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; (a + b)*(c + d) = a*c + b*d + a*d + b*c = (a*c + b*d) + (a*d + b*c)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 성립하므로 a 에는 2를, b 에는 3을, c에는 4를, d에는 5를 각각 대입하면&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; (2 + 3)*(4 + 5) = 2*4 + 3*5 + 2*5 + 3*4 = (2*4 + 3*5) + (2*5 + 3*4)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞에서 했던 계산 중에 2*5 = 10, 3*4 = 12 은 곱셈이 2회인데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 계산을 (2 + 3)*(4 + 5) = (2*4 + 3*5) + (2*5 + 3*4)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 2*5 + 3*4&amp;nbsp; = (2 + 3)*(4 + 5) - (2*4 + 3*5)&amp;nbsp; 임을 이용하면 곱셈을 1회 줄일 수 있습니다. (덧셈과 뺄셈 회수는 조금 불어닙니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜냐 하면 2*4 = 8 (10의 자리수 곱셈)과 3*5 = 15 (1의 자리수 곱셈)은 미리 했으므로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2 + 3)*(4 + 5) 만 계산하고 여기에 미리 계산된 (2*5 + 3*4) 을 뺄셈하면 2*5 + 3*4 을&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2 + 3)*(4 + 5) - &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(&lt;/span&gt;2*4 + 3*5) = 5*9 - (8 + 15) = 45 - 23 = 22&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 계산에는 덧셈 1회, 뺄셈 1회, 곱셈 1회입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;html xml&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;                  2  3
          x )     4  5
            -----------
               8  1  5
               2  2          = (2 + 3)*(4 + 5) - (8 + 15) = 45 - 23 = 22
            -----------
            1  0  3  5&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 곱셈표에서 보듯이,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;곱셈은 2*4 = 8, 3*5 = 15, (2 + 3)*(4 + 5) = 45 로 모두 3회입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;덧셈은 2 + 3 = 5, 4 + 5 = 9, 8 + 15 = 23 으로 모두 3회입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;뺄셈은 45 - (8 + 15) 로 1회,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 그리고&amp;nbsp; 815 + 220 에 덧셈 1회 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 그러므로 덧셈과 뺄셈은 총 5회, 곱셈은 3회가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러므로.&amp;nbsp; &amp;nbsp;곱셈 회수 + 덧셈과 뺄셈 회수 = 3(회) + 5(회) = 8(회) 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 예에서는 두 자리 십진법 수의 곱셈을 보여주었는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 카라츄바 곱셈 방법은 N자리 r진법&amp;nbsp; 수의 곱셈에도 적용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;예를 들어, 4자리 16진법수 곱셈&amp;nbsp; 0xCAFE * 0xABBA 에도 적용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;html xml&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;                  C  A  F  E
          x )     A  B  B  A
            ----------------&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘/정수론</category>
      <category>Karatsuba #multiplication #카라츄바 #곱셈</category>
      <author>Scripter</author>
      <guid isPermaLink="true">https://scripting.tistory.com/857</guid>
      <comments>https://scripting.tistory.com/857#entry857comment</comments>
      <pubDate>Sun, 24 Dec 2023 12:12:09 +0900</pubDate>
    </item>
    <item>
      <title>무료로 싑게 쓰는 Small BASIC을 소개합니다.</title>
      <link>https://scripting.tistory.com/856</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Small BASIC은 Microsoft에서 제작 배포하는 BASIC 언어 인터프리터로서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;편집기가 내장되어 있으며, 그래픽 기능도 있으며,&amp;nbsp; Dot NET 4.5 환경에서 동작합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://smallbasic-publicwebsite.azurewebsites.net/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Small BASIC 홈페이지&lt;/a&gt;에서 다운로드하여 설치할 수 있으며, &lt;a href=&quot;https://smallbasic-publicwebsite.azurewebsites.net/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;풍부한 튜토리얼&lt;/a&gt;도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Small BASIC을 설치하고, 처음 실행한 화면입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;StartSmallBasic01.png&quot; data-origin-width=&quot;1499&quot; data-origin-height=&quot;1191&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qDRLU/btsCpdnE93c/kL3kYN8EVv7Y2Cxk2GFBu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qDRLU/btsCpdnE93c/kL3kYN8EVv7Y2Cxk2GFBu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qDRLU/btsCpdnE93c/kL3kYN8EVv7Y2Cxk2GFBu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqDRLU%2FbtsCpdnE93c%2FkL3kYN8EVv7Y2Cxk2GFBu1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;397&quot; height=&quot;315&quot; data-filename=&quot;StartSmallBasic01.png&quot; data-origin-width=&quot;1499&quot; data-origin-height=&quot;1191&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음의 딱 한줄 을 편집기에 쓰고&lt;/p&gt;
&lt;pre id=&quot;code_1703124070550&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;TextWindow.WriteLine(&quot;Hello World!&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 저장하고(파일 확장자가 sb로 저장됨),&amp;nbsp; 실행 버튼 누르면&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hello World! 가 출력된 컨솔창이 뜹니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 몇 줄을 입력하고&lt;/p&gt;
&lt;pre id=&quot;code_1703124440334&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Turtle.Show()
For i = 1 To 45
  Turtle.Turn(8)
  Turtle.Move(10)
EndFor&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저장 버튼 누르고, 실행 버튼 누르면 아래 처럼 그래픽이 그려집니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;StartSmallBasic02.png&quot; data-origin-width=&quot;938&quot; data-origin-height=&quot;706&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ytU4K/btsCoDtlmaI/zuswK1BZkKAkBwxwxxCAD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ytU4K/btsCoDtlmaI/zuswK1BZkKAkBwxwxxCAD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ytU4K/btsCoDtlmaI/zuswK1BZkKAkBwxwxxCAD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FytU4K%2FbtsCoDtlmaI%2FzuswK1BZkKAkBwxwxxCAD1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;395&quot; height=&quot;297&quot; data-filename=&quot;StartSmallBasic02.png&quot; data-origin-width=&quot;938&quot; data-origin-height=&quot;706&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>소개와 설치/BASIC</category>
      <author>Scripter</author>
      <guid isPermaLink="true">https://scripting.tistory.com/856</guid>
      <comments>https://scripting.tistory.com/856#entry856comment</comments>
      <pubDate>Thu, 21 Dec 2023 11:11:46 +0900</pubDate>
    </item>
    <item>
      <title>2차방정식(quadratic equation)의 근의 공식</title>
      <link>https://scripting.tistory.com/854</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;2차방정식&amp;nbsp; $$ ax^2 + bx + c = 0 $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(단, $a != 0$)의 근을 구하는 공식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ x = \dfrac{-b \pm \sqrt{b^2 - 4ac}}{2a} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;황금율(golden ratio)을 구하는 2차방정식&amp;nbsp; $$ x^2 - x - 1&amp;nbsp; = 0 $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의 두 근은&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ x = \dfrac{1 \pm \sqrt{5}}{2} $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이고 이 중에 큰 근 $$ x = \dfrac{1 + \sqrt{5}}{2} = 1.618033988749895... $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 황금율이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>학습/수학</category>
      <author>Scripter</author>
      <guid isPermaLink="true">https://scripting.tistory.com/854</guid>
      <comments>https://scripting.tistory.com/854#entry854comment</comments>
      <pubDate>Fri, 15 Dec 2023 19:48:34 +0900</pubDate>
    </item>
    <item>
      <title>네가보나치(Negabonacci) 란</title>
      <link>https://scripting.tistory.com/853</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;피보나치 수열이 0 이상의 정수 n에 대하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;선형점화공식(linear recurency):&amp;nbsp; f(n) = f(n - 1) + f(n - 2) 과&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;과 초기조건(initial condition):&amp;nbsp; f(0) = 0,&amp;nbsp; f(1) = 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로 정의된 수열인데 이를 음의 정수 n에 대하여도 위의 점화공식을&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;f(n) = f(n + 2) - f(n + 1)&amp;nbsp; &amp;nbsp; &amp;nbsp;(&amp;forall; n = -1, -2, -3, -4, -5, ...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로 고쳐 축차 적용하여 얻어지는 수열&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;f(-1), f(-2), f(-3), f(-4), f(-5), ....&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;을 &lt;i&gt;네가보나치 수열(negabonacci sequence)&lt;/i&gt;이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;즉,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;f(-1) = f(1) - f(0) = 1 - 0 = 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;f(-2) = f(0) - f(-1) = 0 - 1 = -1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;f(-3) = f(-1) - f(-2) = 1 - (-1) = 2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;f(-4) = f(-2) - f(-3) = -1 - 2 = -3&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;f(-5) = f(-3) - f(-4) = 2 - (-3) = 5&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;f(-6) = f(-4) - f(-5) = -3 - 5 = -8&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;..............................................&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘/피보나치</category>
      <author>Scripter</author>
      <guid isPermaLink="true">https://scripting.tistory.com/853</guid>
      <comments>https://scripting.tistory.com/853#entry853comment</comments>
      <pubDate>Fri, 15 Dec 2023 19:37:46 +0900</pubDate>
    </item>
    <item>
      <title>피보나치 수(Fibonacci number)이란?</title>
      <link>https://scripting.tistory.com/852</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;피보나치 수열는 피보나치가 토끼의 성장과 번식을 관찰하다가 발견한 수열이라고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;피보나치 수(Fibonacci number)의 정의는 간단합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0과 1로 시작해서 덧셈을 계속 이어가면 얻어지는 수들입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ......&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초항을 제 0항으로 하고 제 0항, 제 1항, 제 2항, ...... 순으로 나열하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; F(0),&amp;nbsp; F(1),&amp;nbsp; F(2),&amp;nbsp; F(3),&amp;nbsp; F(4), F(5),&amp;nbsp; F(6),&amp;nbsp; F(7),&amp;nbsp; F(8),&amp;nbsp; F(9),&amp;nbsp; F(10), ......&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 되고, 번호를 괄호 속에 넣지 않고 우측 첨자로 붙여 나열하면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; F&lt;sub&gt;0&lt;/sub&gt;,&amp;nbsp; F&lt;sub&gt;1&lt;/sub&gt;,&amp;nbsp; F&lt;sub&gt;2&lt;/sub&gt;,&amp;nbsp; F&lt;sub&gt;3&lt;/sub&gt;,&amp;nbsp; F&lt;sub&gt;4&lt;/sub&gt;,&amp;nbsp; F&lt;sub&gt;5&lt;/sub&gt;,&amp;nbsp; F&lt;sub&gt;6&lt;/sub&gt;,&amp;nbsp; F&lt;sub&gt;7&lt;/sub&gt;,&amp;nbsp; F&lt;sub&gt;8&lt;/sub&gt;,&amp;nbsp; F&lt;sub&gt;9&lt;/sub&gt;,&amp;nbsp; F&lt;sub&gt;10&lt;/sub&gt;, ......&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 됩니다.&amp;nbsp; 즉,&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F&lt;sub&gt;0&lt;/sub&gt; = F(0) = 0&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F&lt;sub&gt;1&lt;/sub&gt; = F(1) = 1&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F&lt;sub&gt;2&lt;/sub&gt; = F(2) = 1&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F&lt;sub&gt;3&lt;/sub&gt; = F(3) = 2&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F&lt;sub&gt;4&lt;/sub&gt; = F(4) = 3&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F&lt;sub&gt;5&lt;/sub&gt; = F(5) = 5&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F&lt;sub&gt;6&lt;/sub&gt; = F(6) = 8&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F&lt;sub&gt;7&lt;/sub&gt; = F(7) = 13&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F&lt;sub&gt;8&lt;/sub&gt; = F(8) = 21&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F&lt;sub&gt;9&lt;/sub&gt; = F(9) = 34&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F&lt;sub&gt;10&lt;/sub&gt; = F(10) = 55&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;........................&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;피보나치 수들을 점화공식(recurrence formula)으로 정의하면&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F(n) = F(n - 1) + F(n - 2)&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;forall; n = 2, 3, 4, 5, ...&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F(0) = 0,&amp;nbsp; F(1) = 1&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;가 됩니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 + 1 = 1&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1 + 1 = 2&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1 + 2 = 3&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2 + 3 = 5&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3 + 5 = 8&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 5 + 8 = 13&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;..........&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위의 점화공식&amp;nbsp; F(n) = F(n - 1) + F(n - 2)&amp;nbsp; 은&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;F(n) - F(n - 1) = F(n - 2)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;혹은&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;F(n) - F(n - 2) = F(n - 1)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;으로 사용되어지기도 합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘/피보나치</category>
      <author>Scripter</author>
      <guid isPermaLink="true">https://scripting.tistory.com/852</guid>
      <comments>https://scripting.tistory.com/852#entry852comment</comments>
      <pubDate>Fri, 15 Dec 2023 18:29:43 +0900</pubDate>
    </item>
    <item>
      <title>다시 생각해 보는 Java 의 Native Number</title>
      <link>https://scripting.tistory.com/851</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Java 에는 부호 없는 native 정수 타입이 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java 8에 와서야 부호 없는 정수를 처리하기 위한 메서드 몇 개가 추가되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, String을 native 타입 number로 변환하는 스태틱 메서드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Long.parseUnsignedLong(String),&amp;nbsp; Integer.parseUnsignedint(String),&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Short.parseUnsignedShort(String),&amp;nbsp; Byte.parseUnsignedByte(String),&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;들과 역으로 native 타입 number를&amp;nbsp;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;String으&lt;/span&gt;로 변환하는 스태틱 메서드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Long.toUnsignedString(long),&amp;nbsp; Integer.toUnsignedString(int)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가 있는데 이들은 타입 캐스팅할 댸 주의해야 할 부분이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 Java 소스는 overflow 와 관련하여 심각한 문제가 발생할 수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;있음을 보여 준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1697951069444&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//  Filename: About_Java_Native_Number.java
//
//       Re-consider Java's native numbers (int or long or double) near to theirs maximal valuea
//
//
//  Compile: javac -d . About_Java_Native_Number.java
//  Execute: java About_Java_Native_Number
//
//
// Date: 2023.10.22


public class About_Java_Native_Number
{

    public static void main(String[] args)
    { 
        System.out.printf(&quot;What is pow(2, 30) = 2**30 (using Python's integer power operator expression)\n&quot;);
        System.out.printf(&quot;                   = 1 &amp;lt;&amp;lt; 30 (using intege's shift opertor expression)\n&quot;);
        System.out.printf(&quot;                   = 2^30 (in LaTeX' math expression)\n&quot;);
        System.out.printf(&quot;\n&quot;);

        System.out.printf(&quot;Math.pow(2, 30) == %s\n&quot;, Math.pow(2, 30));
        System.out.printf(&quot;Math.pow(2, 30) == %e\n&quot;, Math.pow(2, 30));
        System.out.printf(&quot;Math.pow(2, 30) == %.9e\n&quot;, Math.pow(2, 30));
        System.out.printf(&quot;Math.pow(2, 30) == %g\n&quot;, Math.pow(2, 30));
        System.out.printf(&quot;Math.pow(2, 30) == %.0g\n&quot;, Math.pow(2, 30));
        System.out.printf(&quot;Math.pow(2, 30) == %.9g\n&quot;, Math.pow(2, 30));
        System.out.printf(&quot;Math.pow(2, 30) == %f\n&quot;, Math.pow(2, 30));
        System.out.printf(&quot;Math.pow(2, 30) == %.0f\n&quot;, Math.pow(2, 30));
        System.out.printf(&quot;Math.pow(2, 30) == %a\n&quot;, Math.pow(2, 30));
        System.out.printf(&quot;\n&quot;);

        System.out.printf(&quot;1 &amp;lt;&amp;lt; 30 = %d\n&quot;, 1 &amp;lt;&amp;lt; 30);
        System.out.printf(&quot;(1 &amp;lt;&amp;lt; 30) + (1 &amp;lt;&amp;lt; 30) = %d\n&quot;, (1 &amp;lt;&amp;lt; 30) + (1 &amp;lt;&amp;lt; 30) );
        System.out.printf(&quot;(1 &amp;lt;&amp;lt; 30)*2 = %d\n&quot;, (1 &amp;lt;&amp;lt; 30)*2);
        System.out.printf(&quot;1 &amp;lt;&amp;lt; (1 &amp;lt;&amp;lt; 30) &amp;lt;&amp;lt; 1 = %d\n&quot;, (1 &amp;lt;&amp;lt; 30) &amp;lt;&amp;lt; 1 );
        System.out.printf(&quot;0x7FFFFFFF = %d\n&quot;, 0x7FFFFFFF);
        System.out.printf(&quot;0x7FFFFFFF + 1 = %d\n&quot;, 0x7FFFFFFF + 1);
        System.out.printf(&quot;0x7FFFFFFF + 2 = %d\n&quot;, 0x7FFFFFFF + 2);
        System.out.printf(&quot;0x7FFFFFFF + 2 = %d\n&quot;, 0x7FFFFFFF + 2);
        System.out.printf(&quot;0x7FFFFFFF + 1 - 1 = %d\n&quot;, 0x7FFFFFFF + 1 - 1);
        System.out.printf(&quot;0x7FFFFFFF + 2 - 2 = %d\n&quot;, 0x7FFFFFFF + 2 - 2);
        System.out.printf(&quot;0x7FFFFFFF + 3 - 3 = %d\n&quot;, 0x7FFFFFFF + 3 - 3);
        System.out.printf(&quot;\n&quot;);

        System.out.printf(&quot;Is it true that (0x7FFFFFFF + 1) - 1 = (%d + 1) - 1 = %d - 1 = %d ?\n&quot;, 0x7FFFFFFF, 0x7FFFFFFF + 1, (0x7FFFFFFF + 1) - 1);
        System.out.printf(&quot;Is it true that (0x7FFFFFFF + 2) - 2 = (%d + 2) - 2 = %d - 2 = %d ?\n&quot;, 0x7FFFFFFF, 0x7FFFFFFF + 2, (0x7FFFFFFF + 1) - 2);
        System.out.printf(&quot;Is it true that (0x7FFFFFFF + 3) - 3 = (%d + 3) - 3 = %d - 3 = %d ?\n&quot;, 0x7FFFFFFF, 0x7FFFFFFF + 3, (0x7FFFFFFF + 1) - 3);
        System.out.printf(&quot;\n&quot;);

        System.out.printf(&quot;It is true that 1 &amp;lt;&amp;lt; 30 = %d\n&quot;, 1 &amp;lt;&amp;lt; 30);
        System.out.printf(&quot;But, is it true that (1 &amp;lt;&amp;lt; 30)*2/2 = (%d)*2/2 = %d/2 = %d ?\n&quot;, 1 &amp;lt;&amp;lt; 30, (1 &amp;lt;&amp;lt; 30)*2,  (1 &amp;lt;&amp;lt; 30)*2/2);
        System.out.printf(&quot;And, is it true that (1 &amp;lt;&amp;lt; 30)*2/4 = (%d)*2/4 = %d/4 = %d ?\n&quot;, 1 &amp;lt;&amp;lt; 30, (1 &amp;lt;&amp;lt; 30)*2,  (1 &amp;lt;&amp;lt; 30)*2/4);
        System.out.printf(&quot;And, is it true that (1 &amp;lt;&amp;lt; 30)*2/8 = (%d)*2/8 = %d/8 = %d ?\n&quot;, 1 &amp;lt;&amp;lt; 30, (1 &amp;lt;&amp;lt; 30)*2,  (1 &amp;lt;&amp;lt; 30)*2/8);
        System.out.printf(&quot;\n&quot;);

        System.out.printf(&quot;Also, is it true that (1 &amp;lt;&amp;lt; 30)*4/2 = (%d)*4/2 = %d/2 = %d ?\n&quot;, 1 &amp;lt;&amp;lt; 30, (1 &amp;lt;&amp;lt; 30)*4,  (1 &amp;lt;&amp;lt; 30)*4/2);
        System.out.printf(&quot;Also, is it true that ((1 &amp;lt;&amp;lt; 30)*4 + 1234567)/2 = ((%d)*4 + 1234567)/2 = (%d + 1234567)/2 = %d ?\n&quot;, 1 &amp;lt;&amp;lt; 30, (1 &amp;lt;&amp;lt; 30)*4,  ((1 &amp;lt;&amp;lt; 30)*4 + 1234567)/2);
        System.out.printf(&quot;Then, is it true that (Math.pow(2, 30)*4 + 1234567)/2 = ((%.0f)*4 + 1234567)/2 = (%.0f + 1234567)/2 = %.0f ?\n&quot;, Math.pow(2, 30), Math.pow(2, 30)*4,  (Math.pow(2, 30)*4 + 1234567)/2);


        System.out.printf(&quot;In is known that Math.pow(2, 30) == (1 &amp;lt;&amp;lt; 30) ? %s\n&quot;, Math.pow(2, 30) == (1 &amp;lt;&amp;lt; 30));
        System.out.printf(&quot;\n&quot;);

        System.out.printf(&quot;Long.toUnsignedString((byte)0xFFL) = %s\n&quot;, Long.toUnsignedString((byte)0xFFL));
        System.out.printf(&quot;Long.toUnsignedString(0xFFL) = %s\n&quot;, Long.toUnsignedString(0xFFL));
        System.out.printf(&quot;Integer.toUnsignedString((byte)0xFFL) = %s\n&quot;, Integer.toUnsignedString((byte)0xFFL));
        System.out.printf(&quot;Integer.toUnsignedString(0xFF) = %s\n&quot;, Integer.toUnsignedString(0xFF));
        System.out.printf(&quot;Integer.toUnsignedString(0xFFFFFFFFFF) = %s\n&quot;, Integer.toUnsignedString(0xFFFFFFFF));
        System.out.printf(&quot;Long.toUnsignedString(0xFFFFFFFFFF) = %s\n&quot;, Long.toUnsignedString(0xFFFFFFFF));
        System.out.printf(&quot;Long.toUnsignedString(0x100000000L) = %s\n&quot;, Long.toUnsignedString(0x100000000L));
        System.out.printf(&quot;Long.toUnsignedString(0xFFFFFFFFFFFFFFFFL) = %s\n&quot;, Long.toUnsignedString(0xFFFFFFFFFFFFFFFFL));
        System.out.printf(&quot;Long.toUnsignedString(0x8000000000000000L) = %s\n&quot;, Long.toUnsignedString(0x8000000000000000L));
        System.out.printf(&quot;Long.toString(0xFFFFFFFFFFFFFFFFL) = %s\n&quot;, Long.toString(0xFFFFFFFFFFFFFFFFL));
        System.out.printf(&quot;Long.toString(0x8000000000000000L) = %s\n&quot;, Long.toString(0x8000000000000000L));
        System.out.printf(&quot;\n&quot;);

    }
}

/*
---------
 Output:
---------

What is pow(2, 30) = 2**30 (using Python's integer power operator expression)
                   = 1 &amp;lt;&amp;lt; 30 (using intege's shift opertor expression)
                   = 2^30 (in LaTeX' math expression)

Math.pow(2, 30) == 1.073741824E9
Math.pow(2, 30) == 1.073742e+09
Math.pow(2, 30) == 1.073741824e+09
Math.pow(2, 30) == 1.07374e+09
Math.pow(2, 30) == 1e+09
Math.pow(2, 30) == 1.07374182e+09
Math.pow(2, 30) == 1073741824.000000
Math.pow(2, 30) == 1073741824
Math.pow(2, 30) == 0x1.0p30

1 &amp;lt;&amp;lt; 30 = 1073741824
(1 &amp;lt;&amp;lt; 30) + (1 &amp;lt;&amp;lt; 30) = -2147483648
(1 &amp;lt;&amp;lt; 30)*2 = -2147483648
1 &amp;lt;&amp;lt; (1 &amp;lt;&amp;lt; 30) &amp;lt;&amp;lt; 1 = -2147483648
0x7FFFFFFF = 2147483647
0x7FFFFFFF + 1 = -2147483648
0x7FFFFFFF + 2 = -2147483647
0x7FFFFFFF + 2 = -2147483647
0x7FFFFFFF + 1 - 1 = 2147483647
0x7FFFFFFF + 2 - 2 = 2147483647
0x7FFFFFFF + 3 - 3 = 2147483647

Is it true that (0x7FFFFFFF + 1) - 1 = (2147483647 + 1) - 1 = -2147483648 - 1 = 2147483647 ?
Is it true that (0x7FFFFFFF + 2) - 2 = (2147483647 + 2) - 2 = -2147483647 - 2 = 2147483646 ?
Is it true that (0x7FFFFFFF + 3) - 3 = (2147483647 + 3) - 3 = -2147483646 - 3 = 2147483645 ?

It is true that 1 &amp;lt;&amp;lt; 30 = 1073741824
But, is it true that (1 &amp;lt;&amp;lt; 30)*2/2 = (1073741824)*2/2 = -2147483648/2 = -1073741824 ?
And, is it true that (1 &amp;lt;&amp;lt; 30)*2/4 = (1073741824)*2/4 = -2147483648/4 = -536870912 ?
And, is it true that (1 &amp;lt;&amp;lt; 30)*2/8 = (1073741824)*2/8 = -2147483648/8 = -268435456 ?

Also, is it true that (1 &amp;lt;&amp;lt; 30)*4/2 = (1073741824)*4/2 = 0/2 = 0 ?
Also, is it true that ((1 &amp;lt;&amp;lt; 30)*4 + 1234567)/2 = ((1073741824)*4 + 1234567)/2 = (0 + 1234567)/2 = 617283 ?
Then, is it true that (Math.pow(2, 30)*4 + 1234567)/2 = ((1073741824)*4 + 1234567)/2 = (4294967296 + 1234567)/2 = 2148100932 ?
In is known that Math.pow(2, 30) == (1 &amp;lt;&amp;lt; 30) ? true

Long.toUnsignedString((byte)0xFFL) = 18446744073709551615
Long.toUnsignedString(0xFFL) = 255
Integer.toUnsignedString((byte)0xFFL) = 4294967295
Integer.toUnsignedString(0xFF) = 255
Integer.toUnsignedString(0xFFFFFFFFFF) = 4294967295
Long.toUnsignedString(0xFFFFFFFFFF) = 18446744073709551615
Long.toUnsignedString(0x100000000L) = 4294967296
Long.toUnsignedString(0xFFFFFFFFFFFFFFFFL) = 18446744073709551615
Long.toUnsignedString(0x8000000000000000L) = 9223372036854775808
Long.toString(0xFFFFFFFFFFFFFFFFL) = -1
Long.toString(0x8000000000000000L) = -9223372036854775808
*/&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍/Java</category>
      <author>Scripter</author>
      <guid isPermaLink="true">https://scripting.tistory.com/851</guid>
      <comments>https://scripting.tistory.com/851#entry851comment</comments>
      <pubDate>Sun, 22 Oct 2023 13:43:54 +0900</pubDate>
    </item>
    <item>
      <title>C++ 언어에서 큰 부동소수점수(native double) 의 정확도</title>
      <link>https://scripting.tistory.com/850</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;정수부의 자리수가 조금 큰 부동소수점수(64비트 double 포맷의 수)를 십진수 표현으로 출력해 보았습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;십진수로 표현하면&amp;nbsp; 유효자리수 개수가 약 14~15개 정도인데,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Java 언어와 C# 언어에서는 유효수자를 적당한 개수(17개나 15개)로 자르고&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그 뒤를 모두 0으로 출력하였지만,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;C++ 언어에서는 유효수자 아래 부분을 자르지 않고 모두 출력합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Pyhon, Ruby 언어에서도 C/C++ 언어 처럼 유효수자 아래 부분을 0으로 채우지 않습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;물론 Java, C#, Python, C, C++ 어느 프로그램 언어든&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;십진수로 표현할 때 자르는 방법이나 유효수자 아래 부분을 채우는 방법은&amp;nbsp;다르지만,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;덧셈, 뺄셈, 곱셈, 나누셈, 기타 등등에서 유효수자 아래부분의 처리 결과는 대동소이합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;C++ 언어에서 긴 자리 정수를 처리하기 위해&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;gmplib 를 Visual C/C++ 용으로 개조한&amp;nbsp; mpir 라이브러리를 사용하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1679211920371&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// Filename: Test_Of_Native_Double_CPP_01.cpp
//
//
// Compile: cl /utf-8 /EHsc /I. Test_Of_Native_Double_CPP_01.cpp mpir.lib mpirxx.lib
// Execute: Test_Of_Native_Double_CPP_01
// Output:
//                            pow(2, 128) = 340282366920938463463374607431768211456.000000
//                            pow(2, 128) = 340282366920938463463374607431768211456
//     After mpz_pow(r, 2, 128), we get r = 340282366920938463463374607431768211456
//     Let b = 18446744073709551616 = 0x10000000000000000
//     Then we get b * b = 340282366920938463463374607431768211456 = 0x100000000000000000000000000000000
//
//
//  ------------------------------------------------------
//  출처: https://scripting.tistory.com/
//  ------------------------------------------------------


#include &amp;lt;cstdio&amp;gt;
#include &amp;lt;cmath&amp;gt;

#include &amp;lt;mpir.h&amp;gt;
#include &amp;lt;mpirxx.h&amp;gt;

#include &amp;lt;iostream&amp;gt;


using namespace std;

void test_01() 
{
      double y = pow(2, 128);
      printf(&quot;                       pow(2, 128) = %f\n&quot;, y);
      printf(&quot;                       pow(2, 128) = %.f\n&quot;, y);
         
    
    mpz_t r, a;

    mpz_init (r);
    mpz_init_set_str(a, &quot;2&quot;, 0);

    mpz_pow_ui(r, a, 128);

    gmp_printf(&quot;After mpz_pow(r, %Zd, 128), we get r = %Zd\n&quot;, a, r);


    mpz_clear(r);
    mpz_clear(a);
    
    mpz_class b, c;


    b = &quot;0x10000000000000000&quot;;
    c = b * b;

    cout &amp;lt;&amp;lt; &quot;Let b = &quot; &amp;lt;&amp;lt; b &amp;lt;&amp;lt; &quot; = &quot; &amp;lt;&amp;lt; hex &amp;lt;&amp;lt; showbase &amp;lt;&amp;lt; b &amp;lt;&amp;lt; dec &amp;lt;&amp;lt; noshowbase &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; &quot;Then we get b * b = &quot; &amp;lt;&amp;lt; c &amp;lt;&amp;lt; &quot; = &quot; &amp;lt;&amp;lt; hex &amp;lt;&amp;lt; showbase &amp;lt;&amp;lt; c &amp;lt;&amp;lt; dec &amp;lt;&amp;lt; noshowbase &amp;lt;&amp;lt; endl;

                  
}
    
int main(int argc, const char *argv[])
{
    test_01();
    printf(&quot;\n&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍/C++</category>
      <author>Scripter</author>
      <guid isPermaLink="true">https://scripting.tistory.com/850</guid>
      <comments>https://scripting.tistory.com/850#entry850comment</comments>
      <pubDate>Sun, 19 Mar 2023 16:45:26 +0900</pubDate>
    </item>
  </channel>
</rss>