小编Bar*_*own的帖子

为什么十进制数不能用二进制表示?

关于浮点表示,已经向SO发布了几个问题.例如,十进制数0.1没有精确的二进制表示,因此使用==运算符将其与另一个浮点数进行比较是危险的.我理解浮点表示的原理.

我不明白的是,从数学的角度来看,为什么小数点右边的数字比左边的数字更"特殊"?

例如,数字61.0具有精确的二进制表示,因为任何数字的整数部分始终是精确的.但数字6.10并不准确.我所做的只是将十进制移动到一个地方,然后我突然从Exactopia转到了Inexactville.在数学上,两个数字之间应该没有内在差异 - 它们只是数字.

相比之下,如果我将小数位移到另一个方向以产生数字610,我仍然在Exactopia中.我可以继续向那个方向前进(6100,610000000,610000000000000),它们仍然是精确,准确,准确的.但是一旦小数越过某个阈值,数字就不再精确了.

这是怎么回事?

编辑:为了澄清,我想远离关于行业标准表示的讨论,例如IEEE,并坚持我认为是数学上"纯粹"的方式.在基数10中,位置值为:

... 1000  100   10    1   1/10  1/100 ...
Run Code Online (Sandbox Code Playgroud)

在二进制文件中,它们将是:

... 8    4    2    1    1/2  1/4  1/8 ...
Run Code Online (Sandbox Code Playgroud)

对这些数字也没有任何限制.位置无限增加到左侧和右侧.

math floating-point

275
推荐指数
8
解决办法
9万
查看次数

默认构造函数与内联字段初始化

默认构造函数与直接初始化对象字段之间的区别是什么?

有什么理由更喜欢以下示例中的一个而不是另一个?

例1

public class Foo
{
    private int x = 5;
    private String[] y = new String[10];
}
Run Code Online (Sandbox Code Playgroud)

例2

public class Foo
{
    private int x;
    private String[] y;

    public Foo()
    {
        x = 5;
        y = new String[10];
    }
}
Run Code Online (Sandbox Code Playgroud)

java oop constructor

106
推荐指数
3
解决办法
4万
查看次数

在Haskell中编写一个Haskell解释器

一个经典的编程练习是在Lisp/Scheme中编写一个Lisp/Scheme解释器.可以利用完整语言的强大功能为该语言的子集生成解释器.

Haskell有类似的练习吗?我想使用Haskell作为引擎来实现Haskell的子集.当然可以做到,但有没有可供查看的在线资源?


这是背景故事.

我正在探索使用Haskell作为一种语言来探索我正在教授的离散结构课程中的一些概念的想法.在这个学期,我已经选择了Miranda,这是一种激发Haskell的小语言.米兰达做了我想做的事情的90%左右,但哈斯克尔做了大约2000%.:)

所以我的想法是创建一种具有Haskell功能的语言,我希望并禁止其他所有功能.随着学生的进步,我可以在掌握了基础知识后有选择地"开启"各种功能.

教学"语言水平"已成功用于教授JavaScheme.通过限制他们可以做的事情,你可以防止他们在掌握你想要教授的语法和概念的同时在脚中射击.并且您可以提供更好的错误消息.

interpreter haskell functional-programming

85
推荐指数
7
解决办法
1万
查看次数

Haskell或标准ML适合初学者?

我将在离散结构中教授低级课程.我选择了教科书" 离散结构,逻辑和可计算性",因为它包含有助于使用函数式编程语言实现的示例和概念.(我也认为这是一本很好的教科书.)

我想要一个易于理解的FP语言来说明DS概念以及学生可以使用的.大多数学生最多只能用一到两个学期的Java编程.在查看Scheme,Erlang,Haskell,Ocaml和SML之后,我已经确定了Haskell或Standard ML.由于下面列出的原因,我倾向于Haskell,但我喜欢那些活跃的程序员在一个或另一个的意见.

  • Haskell和SML都具有模式匹配,这使得描述递归算法变得简单.
  • Haskell具有很好的列表推导,可以很好地匹配这些列表以数学方式表达的方式.
  • Haskell有懒惰的评价.非常适合使用列表推导技术构建无限列表.
  • SML有一个真正的交互式解释器,可以在其中定义和使用函数.在Haskell中,函数必须在单独的文件中定义,并在交互式shell中使用之前进行编译.
  • SML以易于理解的语法明确确认函数参数和返回类型.例如:val foo = fn:int*int - > int.Haskell隐含的咖喱语法有点迟钝,但并非完全陌生.例如:foo :: Int - > Int - > Int.
  • Haskell默认使用任意精度的整数.它是SML/NJ中的外部库.并且SML/NJ默认将输出截断为70个字符.
  • Haskell的lambda语法很微妙 - 它使用单个反斜杠.SML更明确.但是不确定我们是否会在这堂课中需要lambda.

从本质上讲,SML和Haskell大致相同.我倾向于Haskell,因为我喜欢Haskell中的列表理解和无限列表.但我担心Haskell紧凑语法中的大量符号可能会导致学生出现问题.从我收集到的关于SO的其他帖子开始,Haskell不建议初学者从FP开始.但我们不打算构建成熟的应用程序,只是尝试简单的算法.

你怎么看?


编辑:在阅读了一些很棒的回复后,我应该澄清一些我的要点.

在SML中,在解释器中定义函数和在外部文件中定义函数之间没有语法上的区别.假设您要编写阶乘函数.在Haskell中,您可以将此定义放入文件中并将其加载到GHCi中:

fac 0 = 1
fac n = n * fac (n-1)
Run Code Online (Sandbox Code Playgroud)

对我来说,这很清楚,简洁,并且符合书中的数学定义.但是如果你想直接在GHCi中编写函数,你必须使用不同的语法:

let fac 0 = 1; fac n = n * fac (n-1)
Run Code Online (Sandbox Code Playgroud)

在使用交互式口译员时,从教学角度来看,当学生在文件和命令行中使用相同的代码时,非常非常方便.

通过"显式确认函数",我的意思是在定义函数时,SML立即告诉您函数的名称,参数的类型和返回类型.在Haskell中你必须使用:type命令,然后你会得到一些有点令人困惑的咖喱符号.

关于Haskell的一个更酷的事情 - 这是一个有效的函数定义:

fac 0 = 1
fac (n+1) = (n+1) * fac n
Run Code Online (Sandbox Code Playgroud)

同样,这与他们可能在教科书中找到的定义相匹配.在SML中无法做到这一点!

haskell functional-programming sml discrete-mathematics

76
推荐指数
8
解决办法
3万
查看次数

什么是原始的Forth运营商?

我对实现Forth系统感兴趣,因此我可以获得构建简单VM和运行时的一些经验.

当在Forth开始时,人们通常首先了解堆栈及其运算符(DROP,DUP,SWAP等),因此很自然地将它们视为原始运算符之一.但他们不是.它们中的每一个都可以分解为直接操作内存和堆栈指针的运算符.后来人们学习了存储(!)和获取(@),可以用来实现DUP,SWAP等等(哈!).

那么原始运营商是什么?哪些必须直接在运行时环境中实现,可以从中构建所有其他环境?我对高性能不感兴趣; 我想要一些我(和其他人)可以学习的东西.运营商优化可以在以后进行

(是的,我知道我可以从图灵机启动并从那里开始.这有点极端.)

编辑:我的目标是类似于引导操作系统或新编译器.我至少需要做什么才能实现,以便我可以用这些原始构建块构建系统的其余部分?我不会在裸硬件上实现它; 作为一项教育活动,我会编写自己的最小虚拟机.

interpreter operators forth vm-implementation

35
推荐指数
3
解决办法
9730
查看次数

如何创建WiFi弹出登录页面

当我去一个有WiFi热点的地方(比如Panera Bread)并连接我的iPhone时,热点登录页面会显示为弹出窗口.也就是说,无论我正在运行什么应用程序或我正在使用哪个网页,登录页面都会从底部向上滚动,询问我的登录凭据,然后消失.

但是在其他一些热点地区,在我去Safari并尝试加载网页之前,我没有获得登录页面.

什么是iPhone寻找,导致它在一些热点而不是其他热点弹出登录页面?是否有特殊的HTML元标记?或者它与重定向的实现方式有关?

iphone wifi

30
推荐指数
1
解决办法
7万
查看次数

使用继承和多态来解决常见的游戏问题

我有两节课; 让我们称他们为食人魔和巫师.(所有字段都是公开的,以便更容易输入示例.)

public class Ogre
{
  int weight;
  int height;
  int axeLength;
}

public class Wizard
{
  int age;
  int IQ;
  int height;
}
Run Code Online (Sandbox Code Playgroud)

在每个课程中,我都可以创建一个名为battle()的方法,该方法将确定如果Ogre遇到Ogre或者向导遇到向导,谁将获胜.这是一个例子.如果食人魔遇到食人魔,那么较重的食人魔会获胜.但是如果重量是相同的,那么具有更长轴的那个获胜.

public Ogre battle(Ogre o)
{
  if (this.height > o.height) return this;
  else if (this.height < o.height) return o;
  else if (this.axeLength > o.axeLength) return this;
  else if (this.axeLength < o.axeLength) return o;
  else return this;    // default case
}
Run Code Online (Sandbox Code Playgroud)

我们可以为奇才制作类似的方法.

但是如果巫师遇到食人魔怎么办?当然,我们可以为此制定一种方法,比较高度.

public Wizard battle(Ogre o)
{
  if (this.height > o.height) return this;
  else if (this.height …
Run Code Online (Sandbox Code Playgroud)

java oop inheritance design-patterns

22
推荐指数
4
解决办法
2314
查看次数

这几天用C编程了哪些应用程序?

当我在20年前的大学时,C是我们选择的语言,因为当时它几乎是城里唯一的通用编程语言游戏.我们学会了使用C编程.它用于系统编程,数据结构,操作系统以及其他所有东西.基于文本的控制台I/O是与计算机交互的主要方式.图形用户界面很少见,网络编程根本不存在.

向前推进20多年.我们有很多专业的语言.例如,PHP适用于Web编程.用C编写Web应用程序会很疯狂,但同样用PHP进行系统编程也是疯狂的.

我不再写C了.可以这么说,我已经离开了这个语言的当前行业用途.我知道它用于内核开发,微控制器等.还有什么?

使用C的关键行业是什么,因为它是这项工作的最佳语言?对于哪种应用是C的首选?

c programming-languages

14
推荐指数
5
解决办法
1万
查看次数

离散结构与离散数学的区别

我还没有找到一个好的答案.或者任何答案,就此而言.我被要求为CS课程教授一个离散的结构,但同时确保它不是一个离散的数学课程 - 由数学系提供.

许多大学提供分立结构课程.还有很多DS教科书.但是,当我查看课程大纲和教科书介绍时,从未使用过"离散结构"这个术语; 他们使用"离散数学"代替.DS仅出现在课程/教科书的标题中.

例子:

ODU的CS 381

维基百科上的离散结构条目

什么是离散结构,它与离散数学有什么不同?

math computer-science discrete-mathematics

11
推荐指数
2
解决办法
1万
查看次数

"DELETE FROM table"的output_expression有什么作用?

我最近遇到了一个奇怪的问题.以下是有效的SQL:

DELETE FROM customer *;
Run Code Online (Sandbox Code Playgroud)

PostgreSQL DELETE的文档说明星是一个可能的值output_expression:

删除每一行后由DELETE命令计算和返回的表达式.表达式可以使用USING中列出的表或表的任何列名.写*以返回所有列.

我在有星和没有星星的情况下尝试过它,看不出有什么区别.事实上,我可以在表名之后添加任何单个单词并且它被接受.它甚至不必是实际的列名.没有额外的东西返回.

db=> DELETE FROM customer wheeeeeee;
DELETE 19
Run Code Online (Sandbox Code Playgroud)

那么它做了什么以及我可以用它做什么?

问题也发布在PostgreSQL邮件列表上.

sql postgresql sql-delete

11
推荐指数
1
解决办法
256
查看次数