fix wrong assumption on sign if corner case 0x8000*0x8000