[MacRuby-devel] Strange NSDate behavior building 32 bit v 64 bit

Richard Sepulveda rsepulveda2 at gmail.com
Sun Jan 30 20:34:57 PST 2011


After further investigation, I have found that the "to_f" method in my 32 bit build has problems.

My simple test case, I created a new MacRuby project in the latest XCode.

1. Modified the Valid Archetectures to "i386 x86_64"
2. Added the following snippet of code to rb_main.rb

NSLog( "In rb_main.rb")

i = 1296445544
puts "i = %d class = %s" % [i, i.class.to_s]

f = i.to_f
puts "f = %f class = %@ DIG = %d" % [ f, f.class, Float::DIG.to_s]

if i == f
  puts "Is equal"
else
  puts "Not equal"
end

time = Time.new
puts "time = %s" % [time.to_s]
puts "time to_i = %d" % [time.to_i]
puts "time to_f = %f" % [time.to_f]

3. Modified the Architecture to "64 Bit Intel" or  "Standard (32/64bit Universal)". Ran the code and got this.

2011-01-30 22:17:19.694 TestFloat[15654:a0f] In rb_main.rb
i = 1296445544 class = Fixnum
f = 1296445544.000000 class = Float DIG = 15
Is equal
time = 2011-01-30 22:17:19 -0600
time to_i = 1296447439
time to_f = 1296447439.697984

3. Modified the Architecture to "32 Bit Universal". Ran the code and got this.

2011-01-30 22:20:47.891 TestFloat[15685:a0f] +[NSATSGlyphGenerator initialize] invocation.  The class is deprecated.
2011-01-30 22:20:49.317 TestFloat[15685:a0f] In rb_main.rb
i = 1296445544 class = Bignum
f = 1296445440.000000 class = Float DIG = 15
Not equal
time = 2011-01-30 22:20:49 -0600
time to_i = 1296447649
time to_f = 1296447488.000000

You will notice how the floating point representation has lost a lot of
precision in the 32 bit version which is understandable in a much larger number
but this number is 10 digits and not 15 digits. 

This creates big problems when dealing with anything that is dealing with NSDate such
as NSCalendar, NSDatePicker, NSTimer, etc

You can also reproduce the problem by click the 32 bit button on the Get Info of the 32/64 bit universal version

I hope that i am missing something obvious.

Please help!

On Jan 28, 2011, at 9:00 AM, macruby-devel-request at lists.macosforge.org wrote:
> 
> Message: 3
> Date: Fri, 28 Jan 2011 06:02:23 -0600
> From: Richard Sepulveda <rsepulveda2 at gmail.com>
> To: macruby-devel at lists.macosforge.org
> Subject: [MacRuby-devel] Strange NSDate behavior building 32 bit v 64
> 	bit
> Message-ID: <1258938A-1F77-4150-BEAB-05CD2045DE45 at gmail.com>
> Content-Type: text/plain; charset="us-ascii"
> 
> I am seeing some strange behavior with NSDate, here is my basic code in a new MacRuby project.
> 
> I am running on a MacBook 2009 model, Mac OSX 10.6.6
> 
> I am using the latest XCode and the MacRuby Framework 0.7 in XCode 
> 
> in rbmain.rb:
> 
> NSLog("In rb_main.rb")
> puts "NSDate = " + NSDate.date.to_s
> NSLog( "NSDate = " + NSDate.date.to_s)
> 
> CCode.printNSDate
> 
> in CCode.m:
> 
> @implementation CCode
> 
>  + (void) printNSDate
>  {
>    NSLog(@"In printNSDate, NSDate = %@", NSDate.date);
>  }
> 
> @end
> 
> When compiled: 64-bit Universal, the output is
> 
> 2011-01-28 05:54:16.972 TestRuby[90066:a0f] In rb_main.rb
> NSDate = 2011-01-28 05:54:16 -0600
> 2011-01-28 05:54:16.976 TestRuby[90066:a0f] NSDate = 2011-01-28 05:54:16 -0600
> 2011-01-28 05:54:16.979 TestRuby[90066:a0f] In printNSDate, NSDate = 2011-01-28 05:54:16 -0600
> 
> When compiled: 32-bit Universal, the output is
> 
> 2011-01-28 05:51:23.941 TestRuby[89998:a0f] In rb_main.rb
> NSDate = 2011-01-28 05:44:00 -0600
> 2011-01-28 05:51:23.958 TestRuby[89998:a0f] NSDate = 2011-01-28 05:44:00 -0600
> 2011-01-28 05:51:23.961 TestRuby[89998:a0f] In printNSDate, NSDate = 2011-01-28 05:51:23 -0600
> 2011-01-28 05:51:24.565 TestRuby[89998:a0f] Error loading /Library/InputManagers/Smart Crash Reports/Smart Crash Reports.bundle/Contents/MacOS/Smart Crash Reports:  dlopen(/Library/InputManagers/Smart Crash Reports/Smart Crash Reports.bundle/Contents/MacOS/Smart Crash Reports, 265): no suitable image found.  Did find:
> 	/Library/InputManagers/Smart Crash Reports/Smart Crash Reports.bundle/Contents/MacOS/Smart Crash Reports: GC capability mismatch
> 2011-01-28 05:51:25.409 TestRuby[89998:a0f] Error loading /Library/InputManagers/SIMBL/SIMBL.bundle/Contents/MacOS/SIMBL:  dlopen(/Library/InputManagers/SIMBL/SIMBL.bundle/Contents/MacOS/SIMBL, 265): no suitable image found.  Did find:
> 	/Library/InputManagers/SIMBL/SIMBL.bundle/Contents/MacOS/SIMBL: GC capability mismatch
> 
> 
> The Obj-C routine prints the correct time. 5:51:23 in both cases.
> For 32 bit, the Ruby code prints some time in the past that never changes.
> For 64 bit, the Ruby code prints the correct time.
> 
> Any idea's what could be going on?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-devel/attachments/20110130/152ab766/attachment.html>


More information about the MacRuby-devel mailing list