0.1 + 0.2 == 0.3 is false
print ( 0.3 - 0.2 ) print ( 0.3 - 0.2 == 0.1) #output 0.09999999999999998 False 위와같은 문제는, 부동소수점에대한 고려를 하지않았기때문에 발생한 문제이다. 부동소수점이란, 표시되는 숫자는 10진법에 의해서 표시되지만, 실제 소수를 나타내는 부분은 2진법에의해서 구성되어있는 부분에서 생기는 차이이다. 이때, 지수부(소수점 앞에 부분)는 2진법의 표현으로 10진법의 모든수를 표현할 수 있지만, 가수부(fraction,소수점 뒤에 부분)는 2진법의 표현으로 10진법의 모든수를 표현할 수 없고, 그에따라서 부동소수점 문제가 발생하게 된다. fraction부분은 각 소수점 자리가 1/2, 1/4, 1/8, 1/16, ... 의 크기를 가지고 있으며, ..
2022. 8. 18.
반복문에서 i,j와 j,i의 속도 차이
i,j int a[20][20] = {1,}; for (int i=0; i L3 -> L2 -> L1순서로 저장하게 된다. 또한 데이터를 가져올때, 해당하는 데이터뿐만 아니라, 주변에 있는 데이터도 한번에 긁어오게 되는데(한번 긁어오는데 까지 resource를 많이 사용해야되니깐, 효율성 측면에서), 한번에 긁어오는 순서대로 반복문을 돌리게되면, 더 빠른속도로 작동하게 된다. 실제 주소값은 a[0][0]:7fff8981c830 a[0][1]:7fff8981c834 a[0][2]:7fff8981c838 a[1][0]:7fff8981c880 a[1][1]:7fff8981c884 a[1][2]:7fff8981c888 과 같이 저장되어있으며, 동일 행에 순서대로 저장후, 다음 행에 저장되는것을 확인할 수 있다...
2022. 8. 14.