pow(10, j) and pow(10, 2) converts to different integers
It is strange that assigning pow() value to integers results in different integers between using variables and constants,
like pow(10, j) and pow(10, 2) while j = 2.
The C-source test program is attached. I have tested pow(10, j), pow(i, 2) and pow(i, j), and the output is as following:
10^j (j=1), int= 10, double= 10.000000
10^j (j=2), int= 99, double= 100.000000
10^j (j=3), int= 1000, double= 1000.000000
10^j (j=4), int= 9999, double= 10000.000000
10^1, int= 10
10^2, int= 100
10^3, int= 1000
10^4, int=10000
i^2 (i= 5), int= 24, double= 25.000000
i^2 (i=10), int= 99, double= 100.000000
i^2 (i=11), int= 120, double= 121.000000
i^2 (i=13), int= 168, double= 169.000000
i^2 (i=15), int= 224, double= 225.000000
i^2 (i=20), int= 399, double= 400.000000
i^j (i= 5, j=2), int= 24, double=25.000000
i^j (i= 5, j=3), int= 124, double=125.000000
i^j (i= 5, j=4), int= 624, double=625.000000
i^j (i= 5, j=6), int= 15624, double=15625.000000
i^j (i= 5, j=7), int= 78124, double=78125.000000
i^j (i= 5, j=8), int= 390624, double=390625.000000
i^j (i= 5, j=9), int= 1953124, double=1953125.000000
i^j (i= 7, j=7), int= 823542, double=823543.000000
i^j (i= 7, j=9), int= 40353606, double=40353607.000000
i^j (i=10, j=2), int= 99, double=100.000000
i^j (i=10, j=4), int= 9999, double=10000.000000
i^j (i=10, j=7), int= 9999999, double=10000000.000000
i^j (i=10, j=8), int= 99999999, double=100000000.000000
i^j (i=10, j=9), int= 999999999, double=1000000000.000000
The Development Environment:
Win7 Professional SP1, tdm-gcc 4.8.1/4.7.1, Code::Blocks svn 9677
1) Build log
-------------- Build file: "no target" in "no project" (compiler: unknown)---------------
mingw32-gcc.exe -Wshadow -Winit-self -Wredundant-decls -Wcast-align -Wundef -Wfloat-equal -Winline -
Wunreachable-code -Wmissing-declarations -Wmissing-include-dirs -Wswitch-enum -Wswitch-default -Wmain -
Wextra -Wall -save-temps -c D:\ccode\newtest.c -o D:\ccode\newtest.o
mingw32-g++.exe -o D:\ccode\newtest.exe D:\ccode\newtest.o
Process terminated with status 0 (0 minute(s), 0 second(s))
0 error(s), 0 warning(s) (0 minute(s), 0 second(s))
2) gcc verison
C:\Users\Lenovo>gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=c:/tdm-gcc-32/bin/../libexec/gcc/mingw32/4.8.1/lto-wrapper.e
xe
Target: mingw32
Configured with: ../../../src/gcc-4.8.1/configure --build=mingw32 --enable-langu
ages=ada,c,c++,fortran,lto,objc,obj-c++ --enable-libgomp --enable-lto --enable-g
raphite --enable-libstdcxx-debug --enable-threads=posix --enable-version-specifi
c-runtime-libs --enable-fully-dynamic-string --enable-libstdcxx-threads --enable
-libstdcxx-time --with-gnu-ld --disable-werror --disable-nls --disable-win32-reg
istry --disable-symvers --enable-cxx-flags='-fno-function-sections -fno-data-sec
tions -DWINPTHREAD_STATIC' --prefix=/mingw32tdm --with-local-prefix=/mingw32tdm
--with-pkgversion=tdm-2 --enable-sjlj-exceptions --with-bugurl=http://tdm-gcc.td
ragon.net/bugs
Thread model: posix
gcc version 4.8.1 (tdm-2)
3) ld version
C:\Users\Lenovo>ld -v
GNU ld (GNU Binutils) 2.23.1
Anonymous