1. 1C / Говнокод #13014

    −101

    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
    // Преобразует целое десятичное число (как вариант представления двоичного числа) в вещественное
    Функция ПреобразоватьВЧисло(Знач ДесятичноеЧисло = 0, Точность = 1) Экспорт
    	
    	СчБитов 	= 0;
    	Мантисса 	= 1;
    	Экспонента 	= ?(Точность = 2, -1023, -127);
    	Знак 		= 1;
    	
    	ГраницаМантиссы   = ?(Точность = 2, 52, 23);
    	ГраницаЭкспоненты = ?(Точность = 2, 63, 31);
    	
    	Пока ДесятичноеЧисло >= 1 Цикл
    		
    		Частное = Цел(ДесятичноеЧисло / 2);
    		Остаток = ДесятичноеЧисло % 2;
    		
    		Если СчБитов < ГраницаМантиссы Тогда
    			Мантисса = Мантисса + Остаток * Pow(2, СчБитов - ГраницаМантиссы);
    		ИначеЕсли СчБитов < ГраницаЭкспоненты И СчБитов > ГраницаМантиссы - 1 Тогда
    			Экспонента = Экспонента + Остаток * Pow(2, СчБитов - ГраницаМантиссы);
    		Иначе
    			Знак = ?(Остаток = 1, -1, 1);
    		КонецЕсли;
    		
    		ДесятичноеЧисло = Частное;
    		СчБитов	= СчБитов + 1;
    		
    	КонецЦикла; 
    		
    	Возврат Знак * Мантисса * Pow(2, Экспонента);
    
    КонецФункции

    Запостил: TamerlanDE, 18 Мая 2013

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

    • http://en.wikipedia.org/wiki/Single-precision_floating-point_format
      http://en.wikipedia.org/wiki/Double-precision_floating-point_format
      Ответить
    • Почему Pow не перевели? Выделяется..
      Ответить
      • Матан в 1С не переводится)))
        Ответить
      • Никто не мог предположить, что эта ф-ция кому-то понадобится!
        Ответить
      • На этом месте промт сломался.
        Ответить
      • Экспонента = Экспонента + Остаток * Бух(2, СчБитов - ГраницаМантиссы);
        ?
        http://translate.google.com/#en/ru/Pow
        Ответить
    • http://v8.1c.ru/o7/201602bin/index.htm
      Наконец-то!!!
      Ответить
      • ПотокКонечный = ФайловыеПотоки.ОткрытьДляЗаписи(ИмяФайлаФрагмента); 
        	
        	ЗаписьДанных = Новый ЗаписьДанных(ПотокКонечный);
        	ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(БуферЗаголовокФрагмента);
        	ЗаписьДанных.Записать(РезультатЧтенияФрагмент);
        	ЗаписьДанных.Закрыть();
        	
        	ПотокКонечный.Закрыть();

        Блядь, сделайте меня развидеть. Еще лет через 10 они введут using.
        Ответить
        • Новый ЗаписьДанных(ПотокКонечный)

          С жабы что ли всё посодрали?
          Ответить

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