История изменений
Исправление Stanson, (текущая версия) :
На самом деле арифметика не целочисленная, следовательно xmm0/xmm1*xmm1==xmm0 В чем тогда подвох?
Если рассматривать совсем не целочисленный single precision float, например, то если xmm0 = 1e-23 а xmm1 = 1e23, то (xmm0/xmm1)*xmm1==0 а не xmm0. В других случаях может быть внезапно inf а не xmm0. Можешь проверить.
Но на самом деле я всё понял.
Типичный детект fdiv_bug:
4195835.0 - 3145727.0*(4195835.0/3145727.0) = 0 (Correct value)
4195835.0 - 3145727.0*(4195835.0/3145727.0) = 256 (Flawed Pentium)
В общем, это проверка на наличие FDIV_BUG скомпилённая с SSE :) в [ebx-303BE0h] должно лежать 3145727.0, а в xmm0 где-то ранее загружаться 4195835.0
Исправление Stanson, :
На самом деле арифметика не целочисленная, следовательно xmm0/xmm1*xmm1==xmm0 В чем тогда подвох?
Если рассматривать single precision float, то если xmm0 = 1e-23 а xmm1 = 1e23, то (xmm0/xmm1)*xmm1==0 а не xmm0. В других случаях может быть внезапно inf а не xmm0. Можешь проверить.
Но на самом деле я всё понял.
Типичный детект fdiv_bug:
4195835.0 - 3145727.0*(4195835.0/3145727.0) = 0 (Correct value)
4195835.0 - 3145727.0*(4195835.0/3145727.0) = 256 (Flawed Pentium)
В общем, это проверка на наличие FDIV_BUG скомпилённая с SSE :) в [ebx-303BE0h] должно лежать 3145727.0, а в xmm0 где-то ранее загружаться 4195835.0
Исправление Stanson, :
На самом деле арифметика не целочисленная, следовательно xmm0/xmm1*xmm1==xmm0 В чем тогда подвох?
Если рассматривать single precision float, то если xmm0 = 1e-23 а xmm1 = 1e23, то (xmm0/xmm1)*xmm1==0 Можешь проверить.
Но на самом деле я всё понял.
Типичный детект fdiv_bug:
4195835.0 - 3145727.0*(4195835.0/3145727.0) = 0 (Correct value)
4195835.0 - 3145727.0*(4195835.0/3145727.0) = 256 (Flawed Pentium)
В общем, это проверка на наличие FDIV_BUG скомпилённая с SSE :) в [ebx-303BE0h] должно лежать 3145727.0, а в xmm0 где-то ранее загружаться 4195835.0
Исходная версия Stanson, :
На самом деле арифметика не целочисленная, следовательно xmm0/xmm1*xmm1==xmm0 В чем тогда подвох?
Если рассматривать single precision float, то если xmm0 = 1e-23 а xmm1 = 1e23, то (xmm0/xmm1)*xmm1==0 Можешь проверить.
Но на самом деле я всё понял.
Типичный детект fdiv_bug:
4195835.0 - 3145727.0*(4195835.0/3145727.0) = 0 (Correct value)
4195835.0 - 3145727.0*(4195835.0/3145727.0) = 256 (Flawed Pentium)
/code]
В общем, это проверка на наличие FDIV_BUG скомпилённая с SSE :)
в [ebx-303BE0h] должно лежать 3145727.0, а в xmm0 где-то ранее загружаться 4195835.0