1. JavaScript / Говнокод #7475

    +147

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    datatypes.Float = function(inString)
    {
    	var fBytes = [];
    	for (var i=0;i<4;i++)
    	{
    		var curByte = (inString.charCodeAt(i)&255).toString(2);
    		var byteLen = curByte.length;
    		if (byteLen<8)
    		{
    			for (var bit=0;bit<(8-byteLen);bit++)
    				curByte = '0'+curByte;
    		}
    		fBytes[i] = curByte;
    	}
    	var fBits = fBytes[3]+fBytes[2]+fBytes[1]+fBytes[0];
    	var fSign = parseInt(fBits[0]) ? -1 : 1;
    	var fExp = parseInt(fBits.substring(1,9),2)-127;
    	var fMan;
    	if (fExp == -127)
    		fMan = 0;
    	else
    	{
    		fMan = 1;
    		for (i=0;i<23;i++)
    		{
    			if (parseInt(fBits[9+i])==1)
    				fMan = fMan + 1/Math.pow(2,i+1);
    		}
    		fMan = fMan.toFixed(7);
    	}
    	return(parseFloat((fSign*Math.pow(2,fExp)*fMan).toFixed(3)));
    }

    Вчера накодил, оцените говнистость.

    Запостил: SiPlus, 06 Августа 2011

    Комментарии (11) RSS

    • Блин, fMan = fMan.toFixed(7); здесь лишнее, как удалить? Из-за этого неточно получается. Уже исправил, но не во всех файлах, где этот код использую.
      Ответить
      • > как удалить?
        * скачай Нортона
        * нажми F8
        * готово!
        Ответить
    • Атценити код!!
      Ответить
    • У говнокода есть познавательный момент - я не знал, и не могу найти почему выражение типа
      "\x81"[0];
      не приводит к ошибке, а вместо этого JavaScript считает, что это какой-то символ...
      Ответить
      • Кстати, в Python3 b'A'[0] является рекомендуемым способом записи константы числового кода буквы 'A' (когда нужно показать, что это именно 'A').
        Ответить
        • Тут фишка в том, что код 128 никакому символу не может соответствовать, а строки в JS должны быть в юникоде - поэтому, я, например, думал, что в JS нельзя передать любые бинарные данные как строку / сохранить их как строку.
          Ответить
          • charCodeAt()&255
            И не забудь поменять MIME-тип XMLHttpRequest (overrideMimeType, в IE не пашет).
            Ответить
          • О-о-о, вы меня порадовали. Не ожидал.
            Ответить
            • text/plain;charset=x-user-defined
              Вот такой MIME-тип должен быть. Сам когда-то парился с этим, в интернете в скриптах нашел.
              Ответить
              • mime-type - это совсем от другой стенки гвоздь, это просто стандартный подход к декларции того, какой тип данных следует ожидать. Но на то, что именно передается он не влияет. Вы можете перепутать, или вообще не указывть - сами данные от этого не изменятся.
                А скрипт выше - да, дурацкий, т.как реализовывает битовые операции через строки, да и кроме того, вместо NaN будет 0 возвращать.
                Ответить
            • Исследование показало, что "\x81" записывается как два байта в итоге, т.е. как "\u0081" - ну, кто ж знал... так что мой пример был неудачным, я чет не могу придумать как сформировать строку с 0х81 байтом...
              Ответить

    Добавить комментарий