无心人
发表于 2008-10-16 21:39:16
另外,我想
如果进行双向的转换基选择
很可能从二进制转十进制
和从十进制转二进制
需要不同的优化的基
无心人
发表于 2008-10-16 21:42:47
回复9# GxQ
二进制转十进制必然存在除法或者变形的除法,可以转换成只用加减乘法和移位的操作
十进制转二进制必然存在乘法或者变形的乘法,不会用到除法的
无心人
发表于 2008-10-16 21:47:16
10进制选10000以下比如10000, 1000, 100, 10做基,可以缓存输出字串的
无心人
发表于 2008-10-16 21:54:44
TO 6# 9#
我想,如果单纯考虑基x转换成基y
则根据x, y大小关系
x > y是需要用除法的
否则要用乘法的
所以那个算法,我觉得有问题
gxqcn
发表于 2008-10-16 21:56:33
原帖由 无心人 于 2008-10-16 21:42 发表 http://bbs.emath.ac.cn/images/common/back.gif
回复9# GxQ
二进制转十进制必然存在除法或者变形的除法,可以转换成只用加减乘法和移位的操作
十进制转二进制必然存在乘法或者变形的乘法,不会用到除法的
这是仅实现二进制内核时才有的结论,
如果同时实现了十进制内核,则两者地位完全对等,可完全消除大数除法。
无心人
发表于 2008-10-16 21:58:08
:b:
双内核的少啊
仅知道你的是
呵呵
无心人
发表于 2008-10-16 21:58:40
:)
另外,只有输出很多的情况才需要实现十进制
二进制最适合计算了
无心人
发表于 2008-10-17 07:51:44
我想得到从10^4到10^65536的倒数
的二进制表示的指数序列
如果简单的话
存在表中
使用右移位处理
我想比任何算法
都要快很多的
因为使用SSE2指令的移位
时钟时间至少是乘法的1/16
无心人
发表于 2008-10-17 13:21:11
#include <stdio.h>
#include <stdlib.h>
#define MAXPOS1000
long b = {0};
void main(void)
{
long m, n = 1;
long bitpos = 0;
printf("Input: ");
scanf("%d", &m);
printf("\n");
while (bitpos <= MAXPOS)
{
bitpos ++;
n <<= 1;
if (n >= m)
{
n -= m;
if (b == 1)
break;
printf("%d ", bitpos);
}
if (n == 0)
break;
if (n == 1)
break;
if (b == 1)
break;
b = 1;
}
}
无心人
发表于 2008-10-17 13:22:15
用个程序计算二进制表示的1/10000
结果发现循环节好长啊
Input: 10000
14 15 17 21 22 24 25 27 28 29 33 35 36 37 39 41 42 46 47 48 52 57 58 61 63 64 67
69 72 74 76 77 78 79 81 84 85 86 87 92 93 95 96 101 105 108 109 111 119 122 123
124 126 128 131 134 136 138 142 143 149 151 153 155 158 159 162 165 166 171 173
174 175 176 177 183 184 186 187 188 189 191 192 194 197 199 203 207 208 211 212
213 216 217 218 225 226 227 229 231 232 233 234 235 237 238 240 241 242 243 244
245 247 250 255 256 257 258 259 260 261 262 263 266 268 269 270 273 276 280 281
282 284 288 290 293 294 295 299 300 301 303 304 305 306 309 310 312 315 316 318
320 321 323 325 330 332 333 338 339 340 341 344 347 348 349 350 352 353 354 356
357 360 362 363 364 365 366 367 368 370 371 375 377 379 380 382 383 385 387 389
390 391 394 395 396 397 398 400 402 404 406 407 410 411 413 414 417 418 419 420
422 428 429 430 431 432 435 440 443 445 446 448 450 451 452 454 455 456 459 460
464 465 469 470 471 472 473 474 478 480 486 489 496 498 499 501 502 503
不知道程序有什么错误么?