0:37 컴퓨터는 소수를 저장할 때 2진수로 저장하게 되는데, 이때 최대한 메모리를 아껴야되기에 완전히 정확하지 않지만 오차가 적은 값으로 소수를 저장한다. 그래서 이 방법을 사용하는 JavaScript 에서 0.3 - 0.2 - 0.1 를 계산하면 놀랍게도.. -2.7755575615628914e-17(약 -0.00000000000000002776) 이 나온다. 그래서 이 계산기는 0 이 아닌 그보다 조금 작은 수로 나눈것이다.
컴퓨터는 2진법 기반이라 소수 쪽에서는, 예를들어 0.3이라 표현은 하지만 0.29999나 0.300001 이런 식으로 구현함. 0.1도 0.09999 아니면 0.100001.. 단 0.5는 정확하게 0.5로 구현 하는데, 2^(-1) = 1/2라서 (2진법의 0.1) 그러함. 0.25(1/4, 0.01 이진법), 0.125(1/8, 0.001 이진법) 및 그들의 합으로구성된 소수( 0.375 = 0.25 + 0.125 , 0.011 이진법 등 ) 또한 정확하게 구현함.
근데 내가 알기로는 계산기 알고리즘같은경우 10진법으로 변환해서 몇십자리 제외하고 계산하는걸로 알고있어서 10진법으로 계산한다고 생각하면 저거는 0으로 되기에 그거를 기준으로 생각하면 저거는 그냥 계산기중 쓰레기 계산기 앱 들고와서 저렇다고 봄 물론 그게 네이버라는게 좀 웃기지만
정수(int)는 3을 넣으면 딱 3이 저장되는데 소수(float)는 0.3을 넣어도 정확하게 0.3이 아닌 값(2진수로는 소수를 정확하게 표현 불가능)이 들어가기 때문에 그것 끼리 연산하면 0.3-0.2-0.1이지만 정확하게 0이 나오지 않습니다. 그래서 1/(0이 아니지만 0에 가까운 무언가 저장된 값)을 하니 계산이 되는겁니다
컴퓨터는 일정한 비트수를 사용해서 숫자를 저장합니다. 예를 들어 8비트라고 하면 0과 1의 8자릿수를 사용하는 식이죠. 소수의 경우에도 마찬가지인데, 0과 1로 소수를 표현합니다. 0.1이면 1 / 2니 0.5를 표현하고, 0.01이면 1 / 2 / 2 이니 0.25를 표현하죠. 이렇게 2로 나누어가면서 숫자를 연산하는데, 0.75이면 0.11 (0.5 + 0.25)로 저장하는 식이죠. 근데, 0.75면 되는데, 0.7이면 이런식으론 정확하게 저장하지 못합니다. 여기에서 바로 오차가 발생합니다. 0.1, 0.2, 0.3같은 숫자들은 컴퓨터에게 주어진 비트수 내에서 정확하게 저장이 불가능합니다. 따라서 해당 숫자들의 근사값을 가지고 계산하게 되는데, 이를 덧셈과 뺄셈으로 연산하다 보면 아주 작지만 오차가 발생하게 됩니다. 따라서, 0.3 - 0.2 - 0.1은 0이 아닌 0에 아주 아주 가까운 숫자가 나오게 되는 겁니다. 따라서 0이 아니니 연산이 가능해지죠. 최근 프로그래밍 언어들은 이 헛점을 보완하기 위한 알고리즘을 가지고 있지만, 자바스크립트는 그렇지 않기 때문에 자바스크립트로 만들어진 계산기들은 이를 처리하지 못 하는 겁니다.
최근 프로그래밍 언어들도 대부분 floating point를 사용합니다. 보완하기 위한 알고리즘이라기 보다는 decimal(128비트 10진수 부동소수점 체계) 등 대체하기 위한 숫자 자료형이 따로 존재하는 경우는 있지만 둘 모두 장단점이 있어서 둘을 통합할 수는 없을 것으로 보입니다. 이러나 저러나 컴퓨터에서 수는 유한하니까요
@@Brilliantmovement 소수같은 경우 2진수로 바뀌면 너무 길어지는 수가 있기 때문에 주로 8자리에서 끊습니다. 그렇게 끊으면 원래의 값이 아니지만 원래에 가장 가까운 값이 나오기 떄문에 0.1 + 0.1 = 0.2가 false 고 1.2 - 0.1 = 1.1이 false가 뜨는겁니다. 그래서 이거 모르고 코드짰다가 사고난적도 있죠 ㅋㅋ
소수를 메모리에 저장할때 2진수로 저장하면 끝도없이 나오게 되는데.. ex) 0110011001100110011001100... 여기서 너무 길어지면 이제 숫자 하나 끄적이면 컴퓨터가 맛탱이가 가기떄문에 32, 64자리까지만 저장하고 끊어버리는데, 이떄 오류가 발생해서 ex) (0.3이라면 그보다 아주 살짝 크거나 작게 저장됨) 이런식으로 오차가 발생하기때문에 소수끼리 계산하여 0을 계산하면 값이 나오긴 나오기 때문에 그런거같습니다.. 대부분 프로그래밍 언어들이 이래요..
대부분의 프로그래밍 언어들이 사용하고 있는 부동소수점 방식의 숫자는 수를 지수부와 실수부로 나눠 2진수로 저장하게 되는데, 이것은 무한등비급수로 나타낼 수 있으나 컴퓨터에서 수는 유한합니다. 우리가 사용하는 10진수에서 유한 소수인 0.1 (10^-1)의 경우 2진수 체계에서는 0.0001100110011 ... (2^-4+2^-5+2^-7+2^-8 ...)의 무한소수가 되게 됩니다. 이를 일정 이하까지만 저장해서 오차가 생기게 됩니다.
대부분 놓이는 부분이 있는데 알아놔야 할거는 일반 계산기는 저게 불가능이라는 걸거임 대부분의 계산기는 BCD라는 원리를 사용해서 2진법을 10진법으로 변환시켜서 그걸로 소수점을 표현함 그때 저 소수는 10진법으로 표현될테니 0.3 - 0.2 - 0.1은 BCD에서 0이 나올수밖에 없으니 오류가 떠야함 하지만 저기서는 오류사 뜨지않은것이 BCD가 아닌 이진법(float, double 등) 계산을 사용하였기 때문으로 보임 물론 BCD도 이진법을 10진법으로 바꿔서 한거니 둘다 이진법이긴 하나 계산과정의 차이가 생기는거임
안녕하세요 자바스크립트 개발자입니다. 자바스크립트에서는 32비트 부동소수점 형태의 숫자 저장 방식을 쓰기 때문에 소수에 오차가 나서, 원래는 0.1을 10만번 더하면 10000이 되야하지만, 실제로 하면 정답과 차이가 있습니다. 그러므로 저 계산기에서도 그런 오류( 오류보다는 자바스크립트의 한계 ) 때문에 저게 0으로 인식이 안되고 계산이 되며, 마이너스 값이 나오게 되는 것입니다. ( 좀 왜곡 됐을지도? ) ( 실제로 자바스크립트에서 계산하면, 무한(Infinity) 가 나옵니다. )
언어별로 차이는 있지만 C++에서는 디버그일 경우 정수 및 소수를 모두 초기화하여 연산하기 때문에 위와 같은 현상이 발생하지 않습니다. 하지만 Release로 컴파일 할 경우에는 데이터 타입에 따라 float은 소숫점 6자리, Double은 소숫점 12까지만 초기화, 그 이하자리는 Memory에 이전에 사용했던 쓰레기값이 모두 남기때문에 쓰레기값이 연산되어 나타나는 현상입니다. 일반 분야에서는 문제가 되지 않으나, 반복문이 많은 분야 예를 들어 영상처리 같은 분야에서는 초기화를 제대로 하지 않아 자주 발생하는 오류입니다.
double도 부동소수점(floating point) 표기가 맞습니다. 단지 double precision(2배의 정확성)으로 나타낼 뿐이에요. 따라서 float(single precision)는 4byte, double은 8byte라고 하는 것이지요. 참고로 계산기는 보통 4byte float가지고 소수점 계산하지 않습니다. float 형식 자료형의 유효숫자는 7개뿐이기 때문이고, double 형식 자료형의 유효숫자는 16개 이런식이죠. 계산기가 더 정밀해지려면 double 이상의 자료형이 필요하고 부동소수점은 이렇게 생각해보면 그냥 두개의 정수로 실수를 표현하는 방법에 불과합니다.
간단 설명! 1.컴터가 우리가 사용하는 1,3,1972(?)같은 숫자(십진수)를 저장하려면 이진수(0,1로 이루어진 수)로 바꿔서 저장해야 한다. 2.근데 얘가 수를 저장하려면 일련의 방식을 통해 이진수로 변환하여 저장하는데 저장하는 칸이 정해져있음;; 3.아 그래서 1.3같은거는 저장하는 칸을 훨씬 뛰어넘음 4.그래서 그냥 뒤를 짤라버리는 미친 선택을 함!(얘를들어 1.3이 이진수로 01010101010101이라면 010101로 뒤를 짤라버린 꼴임) 5.그래서 매우 미세한 오차가 생김! 6.그래서 이걸로 심각한 사고도 터짐! 7.결론! 앙기모띠
1. 컴퓨터는 이진법으로 수를 저장한다 -> 그래서 정수는 15 = 8 + 4 + 2 + 1 = 2^3 + 2^2 + 2^1 + 1 = 1111(2) 로 나타낸다. 2. 근데 소수는 소숫점 밑의 수치도 이진법으로 기록해야하니까, 0.5, 0.25, 0.125, 0.0625 식으로 내려간다. (요약 = 이진법으로 바꿔야하다보니까, 모든 수를 2의 거듭제곱, 즉 ... 16 8 4 2 1 0.5 0.25 0.125 0.0625 ... 의 합으로만 표현할 수 있다) 3. 0.3을 최대한 저기에 맞춰서 쓰면 0.25 + 0.03125 + 0.015625 + ... 식으로 근사하게 되는데, 당연하게도 오차가 발생한다. (예시에서는 0.003124 만큼 나오는데, 실제론 더 적은 오차가 나온다) 4. 아무튼 0.3 - 0.2 - 0.1 은 실제로는 (0.3같은거) - (0.2같은거) - (0.1같은거) 를 연산하기 때문에 0이 되지 않는다.
사실 뒤에 영상 만들다보니까 길어져서 짜른겁니다.
영상이 길어지면 중간에 다 나가더라구요
9초전 ㄷㄱ
ㅇㅋ요😊
60초 후에 공개합니다!
똥 싸러 간지 5일 넘은 건가요?
ㅜ
변기에 빠져서 익사한 유튜버 1위
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
ㅇㅈ
ㅇㅈㅇㅈ
ㅇㅈ
잊었는데도 쌈@뽕하게 돌아오는 유튜버 1위
시봉방거 ㅋ
뽕@알앜ㅋ
겁나 쌈@뽕하게 돌아왔넼ㅋㅋ
힙플밈추
ㄹㅇㅋㅋ
0:37 컴퓨터는 소수를 저장할 때 2진수로 저장하게 되는데, 이때 최대한 메모리를 아껴야되기에 완전히 정확하지 않지만 오차가 적은 값으로 소수를 저장한다.
그래서 이 방법을 사용하는 JavaScript 에서 0.3 - 0.2 - 0.1 를 계산하면 놀랍게도..
-2.7755575615628914e-17(약 -0.00000000000000002776) 이 나온다.
그래서 이 계산기는 0 이 아닌 그보다 조금 작은 수로 나눈것이다.
어케한거임 ㄷㄷ
고마워요 스피드왜건
부동소수점과 관련이 있어요
논리적으로 더 이상 다른 비디오를 만들 필요가 없습니다😂😂😂
컴퓨터는 숫자와 그외 모든게 2진수로 저장하고 계산해여.내가 볼땐 계산기프로그램 오류로 보이네여
화장실을 1달동안 간 로지컬 끊고 영상올려라
끊는게 말처름 그리 쉬운게 아니다
ㄴㄴ 7개월동안임
@@Umujuneo 내용물이 얼마나 딱딱하길래 7개월째 못끊는거여
이제 10개월…. 년도가 바껴도 안돌아 오네 ㅋㅋㅋㅋ😊
로지컬님 치질과 변비에 고통받는 것으로 알 고 있습니다.. 부디 빨리 쾌유하시고 쌈@뽕하게 돌아와주실꺼죠?
잊어버려도 안 돌아오는 유튜버.
컴퓨터는 2진법 기반이라 소수 쪽에서는, 예를들어 0.3이라 표현은 하지만 0.29999나 0.300001 이런 식으로 구현함. 0.1도 0.09999 아니면 0.100001.. 단 0.5는 정확하게 0.5로 구현 하는데, 2^(-1) = 1/2라서 (2진법의 0.1) 그러함. 0.25(1/4, 0.01 이진법), 0.125(1/8, 0.001 이진법) 및 그들의 합으로구성된 소수( 0.375 = 0.25 + 0.125 , 0.011 이진법 등 ) 또한 정확하게 구현함.
고마워요 스피드
왜건
0.1 + 0.2 == 0.300004 이런건가?
근데 내가 알기로는 계산기 알고리즘같은경우 10진법으로 변환해서 몇십자리 제외하고 계산하는걸로 알고있어서
10진법으로 계산한다고 생각하면 저거는 0으로 되기에
그거를 기준으로 생각하면 저거는 그냥 계산기중 쓰레기 계산기 앱 들고와서 저렇다고 봄
물론 그게 네이버라는게 좀 웃기지만
이미 있네요
화장실을 4달동안 가시나요
ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
화장실에 갇힌거 아님?
휴지가 없나?
😊@@트루
이쯤 되면 화장실에 살고 있는 듯
"멈춰있던 논리의 시간이 다시 흐르기 시작했다."
정수(int)는 3을 넣으면 딱 3이 저장되는데 소수(float)는 0.3을 넣어도 정확하게 0.3이 아닌 값(2진수로는 소수를 정확하게 표현 불가능)이 들어가기 때문에 그것 끼리 연산하면 0.3-0.2-0.1이지만 정확하게 0이 나오지 않습니다.
그래서 1/(0이 아니지만 0에 가까운 무언가 저장된 값)을 하니 계산이 되는겁니다
0이 아니니까 계산이되는 거죠 소프웨어적으로 0의 값을 저장할때랑 0.0은 다릅니다 이진수로 하면 다른 숫자에요
수학계에서도 0으로 나눈다는 개념을 wheel theory로 서술 하고있습니당
이상엽쌤 유튜브에서 쉽게 알려주셔요 ㅎㅎ
wheel theory는 걍 허위 이론이죠 그저 0으로 나누려는 수많은 이론중 하나일뿐
@@jdragon0122.2 보편적이지 않다고 해서 허위라고 할 수는 없죠 ㅎㅎ
@@jdragon0122.2 0으로 나눌수 있는 수학 체계일 뿐이지 허위 이론은 아니긴 해요. 물론 0으로 나눈다를 정의하는 순간 계산기로 치면 NaN이나 inf같은걸 추가하는거라 좀 의미없긴 하지만요. 기계적으로 나눌수는 있는 세계관인거죠.
부동소수점 연산을 설명하시겠다니 정말 위대합니다 로지컬 선생!!!!
"0.3"
아 스포당한 것 같은데
컴퓨터는 일정한 비트수를 사용해서 숫자를 저장합니다. 예를 들어 8비트라고 하면 0과 1의 8자릿수를 사용하는 식이죠. 소수의 경우에도 마찬가지인데, 0과 1로 소수를 표현합니다. 0.1이면 1 / 2니 0.5를 표현하고, 0.01이면 1 / 2 / 2 이니 0.25를 표현하죠. 이렇게 2로 나누어가면서 숫자를 연산하는데, 0.75이면 0.11 (0.5 + 0.25)로 저장하는 식이죠. 근데, 0.75면 되는데, 0.7이면 이런식으론 정확하게 저장하지 못합니다. 여기에서 바로 오차가 발생합니다. 0.1, 0.2, 0.3같은 숫자들은 컴퓨터에게 주어진 비트수 내에서 정확하게 저장이 불가능합니다. 따라서 해당 숫자들의 근사값을 가지고 계산하게 되는데, 이를 덧셈과 뺄셈으로 연산하다 보면 아주 작지만 오차가 발생하게 됩니다. 따라서, 0.3 - 0.2 - 0.1은 0이 아닌 0에 아주 아주 가까운 숫자가 나오게 되는 겁니다. 따라서 0이 아니니 연산이 가능해지죠. 최근 프로그래밍 언어들은 이 헛점을 보완하기 위한 알고리즘을 가지고 있지만, 자바스크립트는 그렇지 않기 때문에 자바스크립트로 만들어진 계산기들은 이를 처리하지 못 하는 겁니다.
그래서 지금 F12를 누르고 콘솔에서 1.1 + 0.1 == 1.2 를 입력하면 false가 나옵니다
자세한건 코딩애플유튜브
최근 프로그래밍 언어들도 대부분 floating point를 사용합니다. 보완하기 위한 알고리즘이라기 보다는 decimal(128비트 10진수 부동소수점 체계) 등 대체하기 위한 숫자 자료형이 따로 존재하는 경우는 있지만 둘 모두 장단점이 있어서 둘을 통합할 수는 없을 것으로 보입니다.
이러나 저러나 컴퓨터에서 수는 유한하니까요
보완하기 위한 알고리즘? 흠.. 컴퓨터의 기초동작을 이해하시면 소수계산을 사용하지 않는게 맞습니다. 컴퓨터는 애초에 실수를 표현할수가 없어요.
이분 스키비디 토일렛 되셨답니다
잊었는데도 안돌아오는 유튜버
화장실을 4달동안 가서 실종된 로지컬이 있네요...
화장실에서는 8달은 기본이죠
잊었는데 안돌아오는 유튜버
연산법칙 고장내는거는 진짜 일품이십니다...이런 생각을 도대체 어디서
ㄹㅇ 코드(의 의도)파괴자
참고로 저번 그냥 컴퓨터 오류입니다 컴퓨터는 소구를 저장할 때 2진수로 저장하는데 너무 길이 지면 뒤에 숫자를 자르고 저장해서 저런 버그가 나옴니다 그래서 자바스크립트에세는
0.1 + 0.1 = 0.2 가 거짓으로 나옴니다.
참고로 저번 그냥 컴퓨터 오류입니다 컴퓨터는 소구를 저장할 때 2진수로 저장하는데 너무 길이 지면 뒤에 숫자를 자르고 저장해서 저런 버그가 나옴니다 그래서 자바스크립트에세는
0.1 + 0.1 = 0.2 가 거짓으로 나옴니다.
@@Brilliantmovement 소수같은 경우 2진수로 바뀌면 너무 길어지는 수가 있기 때문에 주로 8자리에서 끊습니다. 그렇게 끊으면 원래의 값이 아니지만 원래에 가장 가까운 값이 나오기 떄문에 0.1 + 0.1 = 0.2가 false 고 1.2 - 0.1 = 1.1이 false가 뜨는겁니다. 그래서 이거 모르고 코드짰다가 사고난적도 있죠 ㅋㅋ
0의 0승도 다뤄주시면 좋을 것 같아용
^^
어떤수의 0승은 1이 됩니다.
2⁰=1
1000⁰=1입니다.
그러면
0⁰은 뭘까요?
과연 0승이니 1일까요?
아님 0을 0번 곱했으니 0일까요?
대수학에선 0⁰=1이라고 정의한답니다.
@@Code_Flame밑조건은 무시되나요?
@@정졍-o7k뮌하우젠수에선 0⁰=0
대수학에선 0⁰=1로 정의합니다.
원래 규칙은 a⁰=a/a이지만
1을 대입하면 1⁰=1÷1=1입니다.
하지만 0을 대입하면 0⁰=0÷0인데..
0÷0은 나눌수가 없습니다.
하지만 바퀴이론에선 ㅗ (욕 아님)
이 기호로 씁니다.
바퀴이론:0⁰=0÷0=ㅗ
대수학:0⁰=1
뮌하우젠수:0⁰=0
그러니 ㅗ? 1? 0?
복수 답이 있기에 안되고,
0÷0을 정의하면 수학에 체계가 망가집니다
@@Code_Flame 복수 답이 있으면 답을 하나만 선택하여 확장하면 됩니다.
@@Code_Flame근데 프사가 왜 브롤스타즈...?
형 화장실 직접 만들고있어?
잊었는데도 안돌아오는 유투버 1위
조금 빨리 잊었는데 돌아온 유튜버
1÷(0.3-0.1-0.2) 가 되는 이유는 컴퓨터가 소수계산을 "정확하게" 못 하기 때문입니다. 일반 컴퓨터를 뛰어넘어 양자 컴퓨터도 0.1-0.1을 0이 아닌 0.00000000...8076294... 등으로 나옵니다. (프로그래밍 하면 앎)
프로그래밍 언어를 다루다보면 유사한 경우를 볼 수 있습니다 이유는 숫자를 나타낼때 이진수로 나타내는데 0.1을 완벽하게 나타낼수 없기 때문에 2를 이용해 근삿값을 만드는거죠 그렇기 때문에 정확한 0.1이 아닌 값이 입력되는 겁니다
잊어도 오지않는 유튜버 1위
화장실에 한달살기를 하실 로지컬입니다.
잊었는데 돌아온 유튜버 1위
영상 만들기 귀찮아서 2개로 쪼갠 논리적 씨 폼 미쳤다
저건 그냥 애초에 컴퓨터 계산기라서 소수의값 즉 소숫값은 비트로 계산할때 무한하게 나올수밖에 없고 그에대한 근사값이 대입이 됨 그래서 계산이 되는거고
잊었는데 어느세 돌아와았는 유튜버
신이시여 언제 돌아오십나이까
12시간 동안 똥실에서 변비로 고생하고 계시는 로지컬님 화이팅입니다
와 화장실 7달차!!
이 정도면 갇힌거 아님?
로지컬님
(해당 글은 근거없고 수학에 관심만 많은 초딩이 만든 개소리입니다)
오일러등식에서
e^iπ는 -1 이죠
그리고 i는 √-1이니까 제곱을 하면 - 1이돼죠
그럼 e^iπ=i^2죠
근데 여기서 지수만 가져오면 iπ=2죠
그래서 iπ는 2에요(그냥 개소리)
ㅋㅋ 근데 왜 지수만 가지고 와요 ㅋㅋ
@@김쿵쿵-z5w 그래서 개소리입니다 ㅋㅋㅋㅋ
@@hindenburg_202 ㅋㅋ 근데 수학에 관심 많으신가봐요ㅋㅋ
양변에 자연로그를 씌우면 ipi=2ln(i)
ln(i) = ipi/2
ipi=ipi
참!
소수를 메모리에 저장할때 2진수로 저장하면 끝도없이 나오게 되는데.. ex) 0110011001100110011001100... 여기서 너무 길어지면 이제 숫자 하나 끄적이면 컴퓨터가 맛탱이가 가기떄문에 32, 64자리까지만 저장하고 끊어버리는데, 이떄 오류가 발생해서 ex) (0.3이라면 그보다 아주 살짝 크거나 작게 저장됨) 이런식으로 오차가 발생하기때문에 소수끼리 계산하여 0을 계산하면 값이 나오긴 나오기 때문에 그런거같습니다.. 대부분 프로그래밍 언어들이 이래요..
"언제 온진 모르겠는데 아무튼 돌아온 유튜버"
화장실을 9개월동안 있으시다니ㄷㄷ
대부분의 프로그래밍 언어들이 사용하고 있는 부동소수점 방식의 숫자는 수를 지수부와 실수부로 나눠 2진수로 저장하게 되는데, 이것은 무한등비급수로 나타낼 수 있으나 컴퓨터에서 수는 유한합니다.
우리가 사용하는 10진수에서 유한 소수인 0.1 (10^-1)의 경우 2진수 체계에서는 0.0001100110011 ... (2^-4+2^-5+2^-7+2^-8 ...)의 무한소수가 되게 됩니다.
이를 일정 이하까지만 저장해서 오차가 생기게 됩니다.
멈춰있던 시계가 움직이기 시작했다
다시 멈췄다
계산기에서 일부 소수점 이하로 내려가면 반올림을 하니 가로 안의 합을 우선으로 하지 않고 분배법칙을 먼저 시행하면 가능할 듯.
볼일을 4주동안 보는 미친 인간 ㄷㄷ
형님 화장실에서 뭘 하고 계신겁니까,,,,,!
대부분 놓이는 부분이 있는데 알아놔야 할거는 일반 계산기는 저게 불가능이라는 걸거임
대부분의 계산기는 BCD라는 원리를 사용해서 2진법을 10진법으로 변환시켜서 그걸로 소수점을 표현함
그때 저 소수는 10진법으로 표현될테니 0.3 - 0.2 - 0.1은 BCD에서 0이 나올수밖에 없으니 오류가 떠야함
하지만 저기서는 오류사 뜨지않은것이 BCD가 아닌 이진법(float, double 등) 계산을 사용하였기 때문으로 보임
물론 BCD도 이진법을 10진법으로 바꿔서 한거니 둘다 이진법이긴 하나 계산과정의 차이가 생기는거임
빌드 업 좋네😊
아닠ㅋㄱ 형 아무리 오랜만에 왔다해도 너무한거아니야?
충격적인것은 로지컬도 원리를 모른다는 것이다
그러므로 2편은 없다
화장실이 무너져서 10개월동안 못오시는거죠??
이분 자택 화장실에서 변싼체 발견되었다고 합니다
내가 보기에는 오히려 주인장보다 댓글들이 더 천재야...
뭐야 로지컬씨 돌아왔구나
화장실 문잠김사고 불안대상 1위
ㅋㅋㅋ 지금도 보는 사람이 있었군요.
화장실에 갇히셨나요
그래서 똥을 3개월이나 싸시는 로지컬님 언제오나요
아니 이 양반은 화장실에 살림을 차렸나
또 다시 돌아오셨구려..
이정도면 치질걸리셔서 죽은거 아닌가요
후속 영상이 없길래 10일 전 영상인 줄 알았는데 10개월 전이었네 뭐지
0으로 나누는 법을 발견해내고 말아서 4차원 이세카이로 전생했나
알려줘도 어차피 이해못하니 그렇다는것만 알려주는 갓지컬 미첫다
안녕하세요 자바스크립트 개발자입니다.
자바스크립트에서는 32비트 부동소수점 형태의 숫자 저장 방식을 쓰기 때문에
소수에 오차가 나서, 원래는 0.1을 10만번 더하면 10000이 되야하지만,
실제로 하면 정답과 차이가 있습니다.
그러므로 저 계산기에서도 그런 오류( 오류보다는 자바스크립트의 한계 )
때문에 저게 0으로 인식이 안되고 계산이 되며,
마이너스 값이 나오게 되는 것입니다.
( 좀 왜곡 됐을지도? )
( 실제로 자바스크립트에서 계산하면, 무한(Infinity) 가 나옵니다. )
자바스크립트의 한계가 아니라 이진수의 한계 아닌가요
화장실 7개월동안 앉아계시면 치질 올텐데? ㄷㄷㄷㄷ
언어별로 차이는 있지만 C++에서는 디버그일 경우 정수 및 소수를 모두 초기화하여 연산하기 때문에 위와 같은 현상이 발생하지 않습니다. 하지만 Release로 컴파일 할 경우에는 데이터 타입에 따라 float은 소숫점 6자리, Double은 소숫점 12까지만 초기화, 그 이하자리는 Memory에 이전에 사용했던 쓰레기값이 모두 남기때문에 쓰레기값이 연산되어 나타나는 현상입니다. 일반 분야에서는 문제가 되지 않으나, 반복문이 많은 분야 예를 들어 영상처리 같은 분야에서는 초기화를 제대로 하지 않아 자주 발생하는 오류입니다.
소수-소수 연산할때 double이 아니라 float로 계산되는거 같네요 float는 오차가 있어서 계산 결과가 정확히 0이 되지 않고 0의 근사값이 되어 나눠지는거 같습니다
double도 부동소수점(floating point) 표기가 맞습니다. 단지 double precision(2배의 정확성)으로 나타낼 뿐이에요.
따라서 float(single precision)는 4byte, double은 8byte라고 하는 것이지요. 참고로 계산기는 보통 4byte float가지고 소수점 계산하지 않습니다.
float 형식 자료형의 유효숫자는 7개뿐이기 때문이고, double 형식 자료형의 유효숫자는 16개 이런식이죠.
계산기가 더 정밀해지려면 double 이상의 자료형이 필요하고 부동소수점은 이렇게 생각해보면 그냥 두개의 정수로 실수를 표현하는 방법에 불과합니다.
0:59초에 화면 멈추고 흔들어 보셈ㄷㄷ (좋아요 45개 감삼다)
?
?
_?_
_신기해_
_신기해_
화장실에 1년동안 갇힐 유튜버 1위
소수를 컴퓨터에서 저장하는 방식때문에 오차가 생겨서 저런게 발생하는거죠. float형식을 빼거나 더하면 오차가 발생하기에 예외처리같은 적정한 처리를 하지 않으면 저렇게 됩니다
잊을법 하면 돌아오는 유튜버
영상 주기가 이렇게 짧은 사람은 로지컬이 아닌데 누구냐
뒤 영상어디감?? 화장실가서 아직 안돌아오심??
ㄹㅇㅋㅋ
와!자바스크립트 소수점 연산 아시는구나!
화장실에서 8개월동안 있으시네요
혹시 급똥 싸시다 변기에 빠지셨나요? ㅋㅋㅋㅋㅋㅋ
간단 설명!
1.컴터가 우리가 사용하는 1,3,1972(?)같은 숫자(십진수)를 저장하려면 이진수(0,1로 이루어진 수)로 바꿔서 저장해야 한다.
2.근데 얘가 수를 저장하려면 일련의 방식을 통해 이진수로 변환하여 저장하는데 저장하는 칸이 정해져있음;;
3.아 그래서 1.3같은거는 저장하는 칸을 훨씬 뛰어넘음
4.그래서 그냥 뒤를 짤라버리는 미친 선택을 함!(얘를들어 1.3이 이진수로 01010101010101이라면 010101로 뒤를 짤라버린 꼴임)
5.그래서 매우 미세한 오차가 생김!
6.그래서 이걸로 심각한 사고도 터짐!
7.결론! 앙기모띠
이정도면 만들어 싸는게 화장실을 만들어 싸는게 아닌가
화장실에 10개월동안 갇혀있으신가요
기다린지 4시간 째... 아직도 화장실에 계신 건가요...
똥을 3개월동안 싸시는 로지컬님의 배변생활에 화이팅을 보냅니다
1. 컴퓨터는 이진법으로 수를 저장한다 -> 그래서 정수는 15 = 8 + 4 + 2 + 1 = 2^3 + 2^2 + 2^1 + 1 = 1111(2) 로 나타낸다.
2. 근데 소수는 소숫점 밑의 수치도 이진법으로 기록해야하니까, 0.5, 0.25, 0.125, 0.0625 식으로 내려간다.
(요약 = 이진법으로 바꿔야하다보니까, 모든 수를 2의 거듭제곱, 즉 ... 16 8 4 2 1 0.5 0.25 0.125 0.0625 ... 의 합으로만 표현할 수 있다)
3. 0.3을 최대한 저기에 맞춰서 쓰면 0.25 + 0.03125 + 0.015625 + ... 식으로 근사하게 되는데, 당연하게도 오차가 발생한다. (예시에서는 0.003124 만큼 나오는데, 실제론 더 적은 오차가 나온다)
4. 아무튼 0.3 - 0.2 - 0.1 은 실제로는 (0.3같은거) - (0.2같은거) - (0.1같은거) 를 연산하기 때문에 0이 되지 않는다.
노트북 들고 화장실 가지 말라니까... 그만 화장실에서 나올때가 되었잖아
이주인 양반 화장실에 갇혔다!! 3개월째 영상이 없어!
젠장!! GOAT가 돌아왔다!!
오오... 감사합니다
화장실을10달동안가시네..
지금 변기속에 있는 미생물과 공부하고 있나요?
선생님 계산기를 들고 협박을 하는 계산기에게 감금을 당하신거라면 다음영상에 계산기를 들ㄱ..
컴퓨터가 소수를 저장할 때 근사값으로 저장을 해서 사실 0.3-0.2-0.1을 계산하라고 하면 0이 아닌 0과 매우 가까운 다른 수가 나옵니다!
똥을 3주동안 싸는 로지컬 ㄷ
지금 보니까 이 사람 목소리 궤도랑 비슷한 거 같음
화장실을 6개월동안 가는사람이 있네 ㄷㄷ
혹시 화장실에 갇히셨나요?? 두달째...
화장실이 혹시 당신을 먹었나요?
계산기는 모든 계산을 2진수로 변환해서 계산하니까 저런 결과가 나옴.
혹시 화장실이 화성에 있나요??
저기,,,죄송한데 변기에 빠지셨는지,,
화장실에 갇혔는데 변기 막혀서 뚫다가 가셨나요
애초에 0은 3이므로 3으로 나누는게 불가능하지 않다면 0으로 나누는것도 가능하지 않나요?
화장실을 7달을 가네ㄷㄷ
이 사람 찢어져서 병원에서 치료중인지, 왜이리 안와?
3달동안 화장실 가셨군요