关于浮点表示,已经向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)
对这些数字也没有任何限制.位置无限增加到左侧和右侧.
默认构造函数与直接初始化对象字段之间的区别是什么?
有什么理由更喜欢以下示例中的一个而不是另一个?
public class Foo
{
private int x = 5;
private String[] y = new String[10];
}
Run Code Online (Sandbox Code Playgroud)
public class Foo
{
private int x;
private String[] y;
public Foo()
{
x = 5;
y = new String[10];
}
}
Run Code Online (Sandbox Code Playgroud) 一个经典的编程练习是在Lisp/Scheme中编写一个Lisp/Scheme解释器.可以利用完整语言的强大功能为该语言的子集生成解释器.
Haskell有类似的练习吗?我想使用Haskell作为引擎来实现Haskell的子集.当然可以做到,但有没有可供查看的在线资源?
我正在探索使用Haskell作为一种语言来探索我正在教授的离散结构课程中的一些概念的想法.在这个学期,我已经选择了Miranda,这是一种激发Haskell的小语言.米兰达做了我想做的事情的90%左右,但哈斯克尔做了大约2000%.:)
所以我的想法是创建一种具有Haskell功能的语言,我希望并禁止其他所有功能.随着学生的进步,我可以在掌握了基础知识后有选择地"开启"各种功能.
教学"语言水平"已成功用于教授Java和Scheme.通过限制他们可以做的事情,你可以防止他们在掌握你想要教授的语法和概念的同时在脚中射击.并且您可以提供更好的错误消息.
我将在离散结构中教授低级课程.我选择了教科书" 离散结构,逻辑和可计算性",因为它包含有助于使用函数式编程语言实现的示例和概念.(我也认为这是一本很好的教科书.)
我想要一个易于理解的FP语言来说明DS概念以及学生可以使用的.大多数学生最多只能用一到两个学期的Java编程.在查看Scheme,Erlang,Haskell,Ocaml和SML之后,我已经确定了Haskell或Standard ML.由于下面列出的原因,我倾向于Haskell,但我喜欢那些活跃的程序员在一个或另一个的意见.
从本质上讲,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中无法做到这一点!
我对实现Forth系统感兴趣,因此我可以获得构建简单VM和运行时的一些经验.
当在Forth开始时,人们通常首先了解堆栈及其运算符(DROP,DUP,SWAP等),因此很自然地将它们视为原始运算符之一.但他们不是.它们中的每一个都可以分解为直接操作内存和堆栈指针的运算符.后来人们学习了存储(!)和获取(@),可以用来实现DUP,SWAP等等(哈!).
那么原始运营商是什么?哪些必须直接在运行时环境中实现,可以从中构建所有其他环境?我对高性能不感兴趣; 我想要一些我(和其他人)可以学习的东西.运营商优化可以在以后进行
(是的,我知道我可以从图灵机启动并从那里开始.这有点极端.)
编辑:我的目标是类似于引导操作系统或新编译器.我至少需要做什么才能实现,以便我可以用这些原始构建块构建系统的其余部分?我不会在裸硬件上实现它; 作为一项教育活动,我会编写自己的最小虚拟机.
当我去一个有WiFi热点的地方(比如Panera Bread)并连接我的iPhone时,热点登录页面会显示为弹出窗口.也就是说,无论我正在运行什么应用程序或我正在使用哪个网页,登录页面都会从底部向上滚动,询问我的登录凭据,然后消失.
但是在其他一些热点地区,在我去Safari并尝试加载网页之前,我没有获得登录页面.
什么是iPhone寻找,导致它在一些热点而不是其他热点弹出登录页面?是否有特殊的HTML元标记?或者它与重定向的实现方式有关?
我有两节课; 让我们称他们为食人魔和巫师.(所有字段都是公开的,以便更容易输入示例.)
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) 当我在20年前的大学时,C是我们选择的语言,因为当时它几乎是城里唯一的通用编程语言游戏.我们学会了使用C编程.它用于系统编程,数据结构,操作系统以及其他所有东西.基于文本的控制台I/O是与计算机交互的主要方式.图形用户界面很少见,网络编程根本不存在.
向前推进20多年.我们有很多专业的语言.例如,PHP适用于Web编程.用C编写Web应用程序会很疯狂,但同样用PHP进行系统编程也是疯狂的.
我不再写C了.可以这么说,我已经离开了这个语言的当前行业用途.我知道它用于内核开发,微控制器等.还有什么?
使用C的关键行业是什么,因为它是这项工作的最佳语言?对于哪种应用是C的首选?
我还没有找到一个好的答案.或者任何答案,就此而言.我被要求为CS课程教授一个离散的结构,但同时确保它不是一个离散的数学课程 - 由数学系提供.
许多大学提供分立结构课程.还有很多DS教科书.但是,当我查看课程大纲和教科书介绍时,从未使用过"离散结构"这个术语; 他们使用"离散数学"代替.DS仅出现在课程/教科书的标题中.
例子:
什么是离散结构,它与离散数学有什么不同?
我最近遇到了一个奇怪的问题.以下是有效的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)
那么它做了什么以及我可以用它做什么?
haskell ×2
interpreter ×2
java ×2
math ×2
oop ×2
c ×1
constructor ×1
forth ×1
inheritance ×1
iphone ×1
operators ×1
postgresql ×1
sml ×1
sql ×1
sql-delete ×1
wifi ×1