데이지랑 노가리노가리 하다가

진숙이 나이가 24살인지 25살인지 둘다 가물가물해서

24.5살로 쇼부 보고 Math.round( 24.5 ) = 25살로 결정한 것을 계기로

(뭔 계기가 -_-;;;)

예전에 어디선가 반올림할때 Math.round( n ) 보다 Math.floor( n + 0.5 ) 가 빠르다는 것을 본거 같아서

생각난 김에 한번 해봤습니다.

var len: int = 1000000;

var time: int = getTimer();

while( len-- )
     //floor();     // 237, 239, 232, 233, 236 = 235.4
     round();     // 247, 240, 238, 238, 238 = 240.2

trace( getTimer() - time );

function floor(): void
{
     var a: int = Math.floor( 1.5 + 0.5 );
}

function round(): void
{
     var a: int = Math.round( 1.5 );
}

100만번 돌린 결과

floor( n + 0.5 ) 는 235.4 ms 가 나왔고

round( n ) 는 240.2 ms 가 나왔네요.

큰 차이는 아니겠지만

굳이 비율로 따지자면 약 1.9% floor( n + 0.5 ) 가 더 빠른걸로 측정이 됐네요.

측정 방법이나 구문이 잘못된 점 있으면 알려주세요^^



p.s) 이런거 재밌어~


추가 실험


저작자 표시 비영리 동일 조건 변경 허락
신고
  1. Favicon of http://sosiers.tistory.com 데이지 2009.03.18 01:24 신고

    크크 결론은 진숙이 나이는 25살이군요~ ㅋㅋ 저희 맘대루~ㅎㅎ

  2. 파퓨표 2009.03.18 01:52 신고

    -_ -;; 이런거 재미없어; ㅠ ㅋㅋㅋㅋ
    한살 먹은지 얼마 되지도 않았는데;;;; 또 한살을 더 먹이고;; ㅠ ㅋ

  3. Favicon of http://ruudnike.tistory.com 니케 2009.03.18 08:22 신고

    ㅋㅋㅋㅋㅋ 아 웃겨~ 진숙이 나이가 25였구나~~

  4. Favicon of http://skizo.tistory.com SKIZO 2009.03.18 11:15 신고

    가장 빠른건 아마도, int( n )+1 이거 아닐까 싶은. ^^
    floor(), round(), int()에 대해서 체크해보니까. 각각.
    184
    190
    82
    나오네. 뭐 물론, n==1이거나 몇 가지 경우를 생각해야하지만,,,
    그래도, Math를 쓰는 순간부터 이미 속도는 배이상 차이가 나게 되있어섬..
    포스팅에 int쓰는거도 추가 부탁 'ㅁ'/

  5. 케이 2009.03.18 18:19 신고

    재밌네^^

  6. Favicon of http://blog.naver.com/setimets 쫑쫑쫑 2009.03.18 22:28 신고

    진숙이 나이는 25 ㅋㅋㅋㅋㅋㅋ

  7. Favicon of http://diebuster.com hika 2009.03.20 02:15 신고

    위에서 지적하신 그대로 사실은 조건문이 포함되기 때문에 약간 더 느려집니다.

    var a:int=1.5 >int(1.5) ? int(1.5)+1 : int(1.5);

    int형변환이 너무 많기 때문에 캐쉬잡으면

    var b:int=int(1.5);
    var a:int= 1.5 > b ? b+1 : b;

    정도가 되겠습니다 ^^;

  8. Favicon of http://diebuster.com hika 2009.03.20 02:21 신고

    마지막으로...움냐 많이도 쓴다..
    Math클래스 자체는 문제가 아닌데 static Method란 말이죠..round, floor등이.
    static Method는 전에 살짝 설명드렸던 trait객체의 prototype을 타지 않게 해주는 캐쉬테이블에 안잡혀요.(static 시리즈들이 정확히 내부적으로 어디 공간으로 들어가는지 확인을 안해봤는데 ^^), 그러한 이유로 static계열의 변수와 메쏘드는 엄청 느려요. 만약 static이 method가 아니라 값이라면 캐쉬잡는게 무조건 바람직한 지경입니다.
    var pi:Number=Math.PI;
    이것만으로도 파이를 참조하는 수식이 두번만 PI를 호출해도 빨라집니다.
    암튼 이런저런 성능차이로 스크립트언어중에는 Math관련 객체의 인스턴스를 제공하는 객체도 있는데, as3는 기존의 as2호환때문에 내부적으로 하나의 Math객체 안에 as3네임스페이스로 정의된 함수와 그냥 정의된 함수도 두개씩이나 있고..... ^^;

    • Favicon of http://wooyaggo.tistory.com 우야꼬  2009.03.25 20:51 신고

      저도 그래서 Math를 따로 만들어서 썼었는데
      아무리 그래도 내장 API를 담고 있는 Math를 못 따라가겠더라구요 ㅎㅎ

  9. Favicon of http://diebuster.com hika 2009.03.20 02:22 신고

    그외에 감투상으로 암묵적 형변환..

    var a:int=1.5 하면 암묵적 형변환으로 인해 이미 a에는 1이 들어가 있기 때문에 아래와 같이 int를 제거할 수 있습니다.

    var temp:int;
    temp=1.5;
    var a:int= 1.5>temp ? temp+1 : temp;

    이건 명시적 형변환보다 약간 더 느립니다.

    • Favicon of http://wooyaggo.tistory.com 우야꼬  2009.03.25 20:50 신고

      아 그걸 암묵적 형변환이라고 하는군요.
      역시 또 한수 배웁니당 _(_ _)_

  10. Favicon of http://butterguy.tistory.com 버터백통 2009.03.20 09:54 신고

    집요해 -_-+

  11. Favicon of http://skizo.tistory.com SKIZO 2009.03.20 18:26 신고

    hika님 멋져요 'ㅁ'b
    야꼬한테 이야기 많이 들었습니다만, 역시 대단하시네요... 'ㅁ'
    뭔가 한방에 정리가 다 되버리네요 ㅎ
    좋은 글 감사합니다.

  12. Favicon of http://diebuster.com hika 2009.03.23 14:47 신고

    칭찬해주셔서 감사합니당~

  13. Favicon of http://lovedev.tistory.com lovedev 2009.03.30 20:39 신고

    근데 진숙이는 25살? 진숙이가 우야꼬 이름에서 따온걸까? 진짜 존재하는 인물일까?

  14. SSu 2009.08.13 23:16 신고

    진짜 존재하는 인물..........ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 추상화된 퍄퓨표

+ Recent posts