diff --git a/programs/develop/info3ds/info_fun_float.inc b/programs/develop/info3ds/info_fun_float.inc
index befacdaee0..5881749f66 100644
--- a/programs/develop/info3ds/info_fun_float.inc
+++ b/programs/develop/info3ds/info_fun_float.inc
@@ -39,9 +39,10 @@ Data_BCD      DT ?
 Data_Flag     DB ?
 ; ���� १���� (�᫨ �� 0 - ����⥫쭮� �᫮)
 Data_Sign     DB ?
+; ���� १���� - 0 ��� ..e+.. � 1 ��� ..e-..
+Data_Sign_Exp DB ?
 
-
-db 0 ;㪠��⥫� �� ᤢ�� � �����
+align 4
 ; ��ப� ��� �࠭���� �᫠ � ���� ASCII
 Data_String   DB 32 DUP (?)
 
@@ -75,8 +76,7 @@ DoubleFloat_to_String:
 	je	.NoShifts     ;��� ��� ��᫥ ����⮩
 	jl	.Error	      ;�訡��
 	dec	BX
-	shl	BX, 3		;㬭����� �� 8
-	add	EBX, MConst
+	lea ebx,[MConst+8*ebx]
 	fmul	qword [EBX] ;㬭����� �� ����⠭��
 .NoShifts:
 	; ������� �᫮ � ���� BCD
@@ -197,36 +197,37 @@ String_to_DoubleFloat:
 	mov  word [Data_BCD+8],0
 	; ��頥� ���� �����
 	mov	[Data_Sign],0
-	; ����ᨬ � SI 㪠��⥫� �� ��ப�
-	mov	ESI, Data_String
+	; ����ᨬ � esi 㪠��⥫� �� ��ப�
+	mov	esi, Data_String
 	; �ய�᪠�� �஡��� ��। �᫮�
 	mov	ecx,64 ;���� �� ��横�������
 .ShiftIgnore:
 	lodsb
-	cmp	AL,' '
-	jne	.ShiftIgnoreEnd
-	loop	.ShiftIgnore
-	jmp	.Error
+	cmp	al,' '
+	jne .ShiftIgnoreEnd
+	loop .ShiftIgnore
+	jmp .Error
 align 4
 .ShiftIgnoreEnd:
 	; �஢��塞 ���� �᫠
-	cmp	AL,'-'
+	cmp	al,'-'
 	jne	.Positive
 	mov	[Data_Sign],80h
 	lodsb
 .Positive:
 	mov	[Data_Flag],0 ;�ਧ��� ������ �窨
-	mov	DX,0	      ;������ �窨
+	xor	edx,edx	      ;������ �窨
 	mov	ecx,18	      ;����. �᫮ ࠧ�冷�
+align 4
 .ASCIItoBCDConversion:
-	cmp	AL,'.'	      ;�窠?
+	cmp	al,'.'	      ;�窠?
 	jne	.NotDot
 	cmp	[Data_Flag],0 ;�窠 �� ����砫���?
-	jne	.Error
+	jne	.Error        ;�᫨ �窠 㦥 �뫠
 	mov	[Data_Flag],1
 	lodsb
-	cmp	AL,0	      ;����� ��ப�?
-	jne	.NotDot
+	or al,al	      ;����� ��ப�?
+	jnz	.NotDot
 	jmp	.ASCIItoBCDConversionEnd
 align 4
 .NotDot:
@@ -234,71 +235,146 @@ align 4
 	; �᫨ ��� �� �� ����砫���
 	cmp	[Data_Flag],0
 	jnz	.Figures
-	inc	DX
+	inc	edx
 .Figures:
+	cmp al,'e'
+	je .exp_form
+	cmp al,'E'
+	jne @f
+	.exp_form:
+		call string_ExpForm ;�᫨ �᫮ � �ଠ� ..e..
+		or al,al
+		jnz .Error
+		jmp	.ASCIItoBCDConversionEnd
+	@@:
 	; ������� �᫠ ������ ���� ��ࠬ�
-	cmp	AL,'0'
+	cmp	al,'0'
 	jb	.Error
-	cmp	AL,'9'
+	cmp	al,'9'
 	ja	.Error
 	; ��襬 ��।��� ���� � ������� ��ࠤ� BCD
-	and	AL,0Fh
-	or	byte [Data_BCD],AL
+	and	al,15 ;ᨬ���� 0-9 ��ॢ���� � �᫮
+	or	byte [Data_BCD],al
 	; �஢�ઠ �� ����� ��ப�
-	cmp	byte [ESI],0
+	cmp	byte [esi],0
 	je	.ASCIItoBCDConversionEnd
 	; �������� BCD �� 4 ࠧ�鸞 �����
 	; (ᤢ����� ���訥 2 ����)
-	mov	AX,word [Data_BCD+6]
-	shld	word [Data_BCD+8],AX,4
+	mov	ax,word [Data_BCD+6]
+	shld	word [Data_BCD+8],ax,4
 	; (ᤢ����� �।��� 4 ����)
-	mov	EAX, dword [Data_BCD]
-	shld	dword [Data_BCD+4],EAX,4
+	mov	eax,dword [Data_BCD]
+	shld	dword [Data_BCD+4],eax,4
 	; (ᤢ����� ����訥 4 ����)
 	shl	dword [Data_BCD],4
 	; ����㦠�� ᫥���騩 ᨬ��� � AL
 	lodsb
-	loop	.ASCIItoBCDConversion
+	loop .ASCIItoBCDConversion ;�᫨ �� ������. � ���⠢��� dec ecx, jnz ...
 	; �᫨ 19-� ᨬ��� �� 0 � �� �窠,
 	; � �訡�� ��९�������
-	cmp	AL,'.'
+	cmp	al,'.'
 	jne	.NotDot2
-	inc	ecx
+	inc	ecx ;�ய�� �窨 � ���� �祭� ����讣� �᫠
 	lodsb
 .NotDot2:
-	cmp	AL,0
-	jne	.Error ;��९������� ࠧ�來�� �⪨
+	or al,al	;��९������� ࠧ�來�� �⪨?
+	jz	.ASCIItoBCDConversionEnd
+align 4
+.Error: ; �� �� �訡�� ���㫨�� १����
+	fldz	;������ ���� � �⥪ ᮯ�����
+	fstp	[Data_Double]
+	jmp	.End
 
 ; ������������� ����� �� ���� BCD � ������������ �����
 .ASCIItoBCDConversionEnd:
 	; ������ ���� � ���訩 ����
-	mov	AL,[Data_Sign]
-	mov	byte [Data_BCD+9],AL
+	mov	al,[Data_Sign]
+	mov	byte [Data_BCD+9],al
 	; ������ ॣ����� ᮯ�����
 	fninit
 	; ����㧨�� � ᮯ����� �᫮ � BCD-�ଠ�
 	fbld	[Data_BCD]
-	; ���᫨�� ����� ����⥫�
-	mov	EBX,18+1
-	sub	BX,CX
-	sub	BX,DX
-	cmp	EBX,0
-	je	.NoDiv
-	dec	EBX
-	shl	EBX,3		;㬭����� �� 8
-	add	EBX, MConst
-	fdiv	qword [EBX] ;ࠧ������ �� ����⠭��
-.NoDiv:; ���㧨�� �᫮ � ����筮� �ଠ�
-	fstp	[Data_Double]
-	jmp	.End
-align 4
-.Error:; �� �� �訡�� ���㫨�� १����
-	fldz	;������ ���� � �⥪ ᮯ�����
-	fstp	[Data_Double]
+	; ���᫨�� ����� ����⥫� ��� �����⥫�
+	lea ebx,[ecx+edx-18]
+	cmp ebx,0
+	jle .NoMul ;�᫨ �᫮ e-..
+	dec ebx
+	jz .NoDiv ;�᫨ �᫮ e+0
+	dec ebx
+	lea ebx,[MConst+8*ebx]
+	fmul qword [ebx] ;㬭����� �� ����⠭�� (��� �ᥫ � ���⠢��� e+..)
+	jmp .NoDiv
+.NoMul:
+	neg ebx
+	lea ebx,[MConst+8*ebx]
+	fdiv qword [ebx] ;ࠧ������ �� ����⠭��
+.NoDiv: ;���㧨�� �᫮ � ����筮� �ଠ�
+	fstp [Data_Double]
 .End:
 	popad
 	ret
 
+;output:
+; eax - 1 if error
+; edx += size
+align 4
+proc string_ExpForm uses ebx
+	mov [Data_Sign_Exp],0
+	xor eax,eax
+	lodsb
+	cmp al,'+'
+	jne @f
+		lodsb
+	@@:
+	cmp al,'-'
+	jne @f
+		inc [Data_Sign_Exp]
+		lodsb
+	@@:
+	
+	xor ebx,ebx
+	.cycle0:
+		cmp al,0
+		je .cycle0end
+		cmp al,9
+		je .cycle0end
+		cmp al,10
+		je .cycle0end
+		cmp al,13
+		je .cycle0end
+		cmp al,' '
+		je .cycle0end
+		cmp	al,'0'
+		jb .Error
+		cmp	al,'9'
+		ja .Error
+	
+		imul ebx,10
+		and	eax,15 ;ᨬ���� 0-9 ��ॢ���� � �᫮
+		add ebx,eax
+		lodsb
+		jmp .cycle0
+	.cycle0end:
+	
+	cmp [Data_Sign_Exp],0
+	je @f
+		neg ebx
+	@@:
+	cmp	[Data_Flag],0 ;�窠 �� ����砫���?
+	jne @f
+		dec edx
+	@@:
+	add edx,ebx
+
+	xor eax,eax
+	jmp @f
+	.Error:
+		xor eax,eax
+		inc eax
+	@@:
+	ret
+endp
+
 align 4
 proc str_cat uses eax ecx edi esi, str1:dword, str2:dword
 	mov esi,dword[str2]