最近,我对古巴比伦文明的看法是reading,古巴比伦文明使用以60为基数的数字系统,而不是以10为基数.即使这个数字系统以60为基数,他们仍然能够近似2的平方根——这也是数千年前的事了!

enter image description here

我对此很好奇,想看看十进制(以10为基数)的数字如何转换成六进制(以60为基数).使用R编程语言,我找到了this link个答案,其中给出了将数字从某个基数转换为另一个基数的方法.

然而,这里的基数似乎只能在2到36之间(我想要基数60):

base <- function(b, base = 10)
{
  base <- as.integer(base)
  if(base > 36 | base < 2) stop("'base' must be between 2 and 36.")
  
  structure(lapply(b, function(x) 
    {
      n   <- ceiling(log(x, base))
      vec <- numeric()
      val <- x
      
      while(n >= 0)
      {
        rem <- val %/% base^n
        val <- val - rem * base^n
        vec <- c(vec, rem)
        n <- n - 1
      }
      
      while(vec[1] == 0 & length(vec) > 1) vec <- vec[-1]
      structure(x, base = base, representation = vec) 
    }), class = "base")
}

我链接的那篇文章的标题是"One eighth equals seven and thirty in this strange base 60 world"——我想看看这篇文章,并将十进制中的"1/8"转换为六进制中的"7和30".

有人能帮我吗?

推荐答案

给出的代码是almost个作品.对基础的限制<;36只是因为原作者想用符号[0-9A-Z]来表达这些值.go 掉这一限制,并扩展算法,允许"小数点后"有额外的数字(或在60进制的情况下是"六进制小数点后").我们得到了almost个有效数字(函数定义如下):

base(1/8, base = 60, digits = 6)
[[1]]
[1] 0.125
attr(,"base")
[1] 60
attr(,"representation")
[1]  7 29 59 59 59 59

attr(,"class")
[1] "base"

我们得到的不是"7 30",而是"7 29(59重复)",这类似于进行十进制计算,应该是0.2,而不是0.1999....

这大概可以通过适当的"数字模糊"阈值来解决.

代码中缺少的另一件事是,由于它包含小数部分,因此结果应该返回信息,告诉您"小数"点的位置(最简单的情况下,包括输出中的值digits).

代码还有其他方面可以改进(例如预分配vec,而不是迭代地构建).


base <- function(b, base = 10, digits = 0) {
  base <- as.integer(base)
  structure(lapply(b, function(x)
    {
      n   <- ceiling(log(x, base))
      vec <- numeric()
      val <- x

      while(n >= -1*digits )  {
        rem <- val %/% base^n
        val <- val - rem * base^n
        vec <- c(vec, rem)
        n <- n - 1
      }

      while(vec[1] == 0 & length(vec) > 1) vec <- vec[-1]
      structure(x, base = base, representation = vec)
    }), class = "base")
}

R相关问答推荐

这两种创建S4对象的方法有何不同?

R的法国工作日

如何计算新变量中的通货inflating 率?

Select R中列未排序的收件箱中的最后一个按顺序编号的列

逐行替代引用前一行的for循环

使用格式化程序自定义hc_tooltip以添加textColor删除了我的标记并try 将它们带回失败

创建重复删除的唯一数据集组合列表

检测(并替换)字符串中的数学符号

任意列的欧几里得距离

格点中指数、双曲和反双曲模型曲线的正确绘制

如何在R中合并和合并多个rabrame?

将向量组合到一个数据集中,并相应地命名行

如何将移除事件分配给动态创建的按钮?

在R中,如何在每个堆叠的条上放置误差条,特别是当使用facet_grid时?

筛选出以特定顺序患病的个体

如何写商,水平线,在一个单元格的表在R

无法定义沿边轨迹的 colored颜色 渐变(与值无关)

在gggraph中显示来自不同数据帧的单个值

如何在R中创建条形图,使条形图在y轴上围绕0.5而不是0构建条形图?

如何使用包metaviz更改标签的小数位数?